函数的参数
传递参数:定义一个函数并赋予参数,没定义参数时,只能计算指定的变量名,定义参数后,可以计算任意的值。
参数的语法---写在括号内的值
参数
没有参数
定义函数和调用函数时括号里都不写内容
1 没定义参数 2 s = '你好啊' 3 def my_len(): 4 i = 0 5 for k in s: 6 i+=1 7 return i 8 9 ret = my_len() 10 print(ret)
有一个参数
传什么就是什么
1 定义参数 2 s1 = '你好哈' 3 def my_len1(a): # 自定义参数只需要0个参数,接受参数 #形式参数:形参 4 i = 0 5 for k in a: # a 必须和形参是一致的 6 i += 1 7 return i 8 9 ret1 = my_len1(s1) # 传递参数:传参 # 实际参数:实参 10 ret2 = my_len1('你是谁啊') # 传递参数 11 print(ret1,ret2)
有多个参数
位置参数
1 典型传输多个参数:典型的位置参数 2 def my_sum(a,b): 3 c = a + b 4 return c 5 6 ret = my_sum(1,2) # 位置传参 7 ret2 = my_sum(a=2,b=1) # 关键字传参 8 print(ret,ret2)
站在实参的角度上:
按照位置传参
1 按位置传参 2 def func(a,b): 3 print('a =',a,'b =',b) 4 s = a+b 5 return print(s) 6 7 func(1,2)
按照关键字传参
1 按关键字传参 2 def func(a,b): 3 print('a =',a, 'b =',b) 4 s = a+b 5 return print(s) 6 7 func(b=1,a=2)
混着用也可以,但是必须先按照位置传参,再按照关键字传参,不能同时给一个变量传多个值
1 混着用按位置按关键字传参 2 def func(a,b): 3 print('a =',a, 'b =',b) 4 s = a+b 5 return print(s) 6 7 func(1,b=2) 8 #错误写法 func(1,a=2),因为a不能同时接受两个参数
9 #错误写法 func(a=1,2),因为需要先按照位置传参,再按照关键字传参
站再形参的角度上:
位置参数:必须传,且不能多传以及少传(有几个参数就传几个值)
默认参数:可以不传,如果不写则使用默认参数,若写了就用设置的参数替换默认参数
1 def classmate(name,sex='men'): # 默认参数 sex = 'men' # 形参:name 2 print('%s : %s'%(name,sex)) 3 4 classmate('jerry') # 实参:jerry5 classmate('Amy','woman') # 若有参数,则修改默认参数
只有调用函数的时候
按照位置传:直接写参数的值
按照关键字传: 关键字 = 值 如 open( file, encoding = 'utf-8')
定义函数的时候:
位置参数:直接定义参数
默认参数: 关键字参数: 参数名 = ‘默认值’
动态参数: 可以接受任意多个参数
在定义参数的时候 前面加多个* 例子:def my_len(*aaaa)
约定俗成 都是以 *args 为动态参数
顺序:先定义位置参数,*args,再设置默认参数,最后**kwargs
def func(name,*args,sex='man',**kwargs): print('%s:%s:%s:%s'%(name,args,sex,kwargs)) func('a','v') func('a',sex='girl')
func('a',v='a')
动态参数有两种
*args: 接收的是按照位置传参的值,组成一个元组
1 按照位置传参
2 def classmate(*args):
3 n = 0
4 for i in args:
5 n += i
6 return n
7
8 print(classmate(1,2))
9 print(classmate(1,2,3))
10 print(classmate(1,2,3,4))
**kwargs:接收的是关键字传参的值,组曾一个字典
1 按照关键字传参 2 def func(**kwargs): 3 print(kwargs) 4 5 func(a = 1,b=2,c=3) 6 func(b=2,c=3) 7 func(c=3)
任意传参
1 def fun(*args,**kwargs), 2 print(args,kwargs) 3 4 func(1,2,3,a=2,b=3)
动态参数的另外一种传参方法
1 动态参数的另一种传参方式 2 def func(*args): # 站在形参的角度上,给变量加上*,就是组合所有传来的值 3 print(args) 4 5 func(1,2,3,4,5,6) 6 l = [2,1,3,6,5,2] 7 func(*l) # 站在实参的角度上,给一个序列加上*,就是将这个序列按照顺序打散 8 9 def func(**kwargs): 10 print(kwargs) 11 12 func(a=1,b=2) 13 d = {'a':1,'b':2} 14 func(**d)
函数的注释
def func(): ''' 这个函数实现了什么功能 参数1: 参数2: :return: ''' pass
浙公网安备 33010602011771号