定义函数: 解决的问题: 代码冗余,修改困难 可读性差,扩展性差1内置函数 :print() sum() max()2自定义函数:def 函数名(arg1,arg2,arg3): ‘描述信息‘ 函数体 return 1#任意数据类型*********************先定义,后使用************** 1无参函数 不依赖外部参数 的简单打印语句的函数 不需要返回值 print(foo.__doc__) 显示函数描述信息 2有参函数 依赖外部参数 经过一系列计算 通常需要有返回值 3空函数 作用:框架立见 函数的调用: 空函数:语句形式 foo() 有参函数:表达式形式 res = foo(1,2) #函数运行结束后返回值看不到,必须将函数的返回值赋给一个变量,再打印出来 *****************函数的返回值可以是任意类型****************不写return 返回Nonereturn 多个数据类型 返回元组形式return 1 返回1 字符串解压###########a,b,c,d,e = ‘hello‘ a,_,_,_,e = [1,2,3,4,5] a,*_ = ‘bhjdsklfhdskflhsjkfhjk‘ 元组 字典:(key) 集合 都可以解压 弱类型 :不用事先定义参数和参数类型,但是使用参数时类型错误会报错 参数:形参 在函数定义阶段,括号内定义的参数 实参 在函数调用阶段,括号内定义的参数 不要调用外部的环境变量 可变的数据类型 *args 按位置传值时,多出来的实参保存在* 以元组的形式赋给args **kwargs 按关键字赋值时,把多余的值保存在** 以字典的形式赋给kwargs 在实参的角度: 规则:按位置传值必须在按关键字传值的前面 对一个形参只能赋值一次 1.按照位置传值 2.按照关键字传值 3.混着用在形参的角度: 规则:默认参数必须放到位置参数的后面 1.位置参数 2.默认参数 3.*args (接收位置传值) 4.**kwargs(接收关键字传值)列:
def my_max(x,y): ‘求最大值‘ res = x if x>y else yres1 = my_max(3,5)print(res1) # 打印函数的运行结果,即return 的值print(my_max(5,8)) a =open(‘函数笔记‘,encoding = ‘utf8‘)head,*_,tail = a # 将文件内容解压,取首尾值,*_ 代表中间多个字符串print(head,tail)#空函数def foo(): pass#利用函数改变外部全局变量的值 尽量不要那么做 ,不推荐x = []def register(name,name_list=x): name_list.append(name)res=register(‘ASB‘)print(res) # 打印函数的返回值Noneprint(x)register(‘fff‘)print(x)#实参和形参的练习def foo(x,*args,y=1,**kwargs): print(x) print(y) print(args) print(kwargs) foo(1,2)foo(x=1,y=2)foo(y=2,x=2)foo(1,y=2)foo(1,2,3,4,y=9,a=2,b=4,c=8)默认参数x = ‘male‘def register(sex = x): print(sex)register() def bar(x,y,z): print(x) print(y) print(z)bar(*(1,2,3)) #将元组打散分别用来赋值 def auth(name,passwd,sex=‘male‘): print(name) print(passwd) print(sex)def foo(*args,**kwargs): #args=(‘egon‘,123,‘famale‘) kwargs={} print(‘from foo‘) auth(*args,**kwargs) #*(‘egon‘,123) **{}foo(‘egon‘,123,‘famale‘)foo(name=‘egon‘,passwd=123)
时间: 2024-10-28 04:34:46