函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如len()。但你也可以自己创建函数,这叫自定义函数。
定义一个函数
def functionname( 参数 ):
"函数_文档字符串"
function_suite
return [expression]
执行一个函数
func1()
# 函数名+() 执行函数
函数的返回值 return
1,遇到return,结束函数。 def func1(): print(11) print(22) return #return 后无内容默认返回none print(333) #return 后的操作不执行 print(444) func1() 2,给函数的调用者(执行者)返回值。 def func1(): a = 1 b = 2 return a + b result = func1() print(result) 3 3,无 return 返回None,return 后不写或者 None 返回None def func1(): a = 1 b = 2 result = func1() print(result) None 4,return 返回多个数,将多个数放在元组中返回。 def func1(): a = 1 b = 2 return a,b #return 多个元素,单独赋值给一个变量或者直接打印时会把所有元素放在元组里面组成一个元组 result = func1() print(result) (1,2) 5,return 返回多个值可以分别赋值 def func1(): a = 1 b = 2 return a,b c,d = func1() #可以把a,b的值分别赋值给c,d。注意返回变量个数与赋值变量个数要一致,否则报错
函数的传参
从形参角度
1,位置参数 def func1(x,y): print(x,y) 2,默认参数 如果不传递参数则为默认值,传递则覆盖。必须在位置参数后面。 def register(name,sex='男'): with open('register',encoding='utf-8',mode='a') as f1: f1.write('{} {} '.format(‘kobe’)) 3,动态参数 *args,**kwargs 万能参数 def func2(*args,**kwargs): print(args) # *args 接收所有的位置参数,所有位置参数组成元组 print(kwargs) #**kwargs 接收关键字参数,所有关键字参数组成字典 func2(1,2,3,4,5,6,7,11,'alex','老男孩',a='ww',b='qq',c='222') (1, 2, 3, 4, 5, 6, 7, 11, 'alex', '老男孩') {'a': 'ww', 'b': 'qq', 'c': '222'} 4、函数定义时参数的位置 def fun(位置参数,*args,默认参数,**kwargs): pass 注意:关键字参数既能给默认参数传参也能给位置参数传参还能给**kwargs传参。 默认参数可以通过位置参数和关键字参数传参,但是当前面时*args 只能通过关键字参数的形式传递给默认参数传值 默认参数和动态参数可以不传参,位置参数必须传递参数,如果动态参数未被传参那么args返回的是一个空列表,kwargs返回的是一个空字典 *args **kwargs 不是必须这么表示,也可以用其他例如:*asdf **qwer
练习:
def calc(a,b,c,d=1,e=2):
return (a+b)*(c-d)+e
print(calc(1,2,3,d=5,4))
运行后报错,原因是如果有默认参数和位置参数同时存在,位置参数必须在默认参数后面。
从实参角度
1,位置参数 传参时必须一一对应,按顺序 def func1(x,y): print(x,y) func1(1, 2) 2,关键字参数 必须一一对应,不分顺序。 def func1(x,y,z): print(x,y,z) func1(y=2,x=1,z=5,) 3,混合参数。一一对应,且关键字参数必须在位置参数后面。 def func2(argv1,argv2,argv3): print(argv1) print(argv2) print(argv3) func2(1,2,argv3=4) 4,参数的打散功能 列表打散,列表中的元素传递到*args中去,字典打散,字典中的key value 传递到**kwargs中 l1 = [1,2,3,4] l2 = ['a','b','c'] dict1 = {'name':'kobe','age':40} def func1(*args,**kwargs): # 函数的定义 * 聚合。 print(args) print(kwargs) func1(*l1,*l2,**dict1) # 函数的执行:* 打散功能。 (1, 2, 3, 4, 'a', 'b', 'c') {'name': 'kobe', 'age': 40}