1、位置参数(必选参数)
2、默认参数
功能:可以简化函数的调用
(1)设置默认参数时,必选参数在前,默认参数在后,否则Python解释器会报错。
(2)默认参数必须指向不变对象,字符串Str,None
为什么要设计Str、None这样的不变对象呢?因为不变对象一旦创建,对象内部的数据就不能修改,这样就减少了由于修改数据导致的错误。此外,由于对象不变,多任务环境下同时读取对象不需要加锁,同时读一点问题都没有。我们在编写程序时,如果可以设计一个不变对象,那就尽量设计成不变对象。
3、可变参数
在参数前面加上一个星号*
即传入的参数个数是可变的.
这些可变参数在函数内部自动组装为一个tuple
如果没有可变参数,而参数个数不确定时,我们需要把参数作为一个list或tuple传进来
如果没有给必选参数赋值,则首先把可变参数中的参数传入到必选参数,然后剩下的为可变参数。
如果已经有一个list或tuple,要调用一个可变参数,可以使用 *nums形式,nums为list或tuple的名称
4、关键字参数
** :2个星号
这些关键字参数在函数内部自动组装为一个dict
可以传入任意个关键字参数
5、命名关键字参数
为了限制关键字参数的名字以及个数,可以使用命名关键字参数,只接受某些关键字作为关键字参数
格式:
(1)需要一个特殊分隔符,后面的参数被视为命名关键字参数
(2)如果函数定义中有可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*
注意:
命名关键字参数和关键字参数必须传入参数名,它们和位置参数不同。如果没有传入参数名,调用将会报错。
6、函数中,这几种参数的定义顺序必须是:
必选参数、默认参数、可变参数、命名关键字参数、关键字参数
注意:
** 命名关键字参数在前,不要记错了**
7、参数实例:
def f1(a,b,c=0,*args,**kw):
print('a=',a,'b=',b,'c=',c,'args=',args,'kw=',kw)
def f2(a,b,c=0,*,d,**kw):
print('a=', a, 'b=', b, 'c=', c, 'd=', d, 'kw=', kw)
print('第1行:')
f1(1,2)
print('第2行:')
f1(1,2,3)
print('第3行:')
f1(1,2,3,'a','b')
print('第4行:')
args=(4,5,6,7,8)#此处的args为一个tuple,先把数传给必选参数,剩下的组成一个tuple
f1(*args)
print('第5行:')
f1(1,2,3,'a','b',x=99) # 注意:x and city都不需要加引号
print('第6行:')
f1(1,2,3,'a','b',x=99,city='beijing')
print('第7行:')
#下面开始对函数f2的调用
f2(1,2,d=99,ext=None) #注意:这里的none首字母必须大写,否则调用报错
#因为函数f2中的d是命名关键字参数,所以这里的d=99就是对命名关键字参数赋值,
#而不是对后面的关键字参数赋值
print('第8行:')
args=(1,2,3)
kw={'d':99,'x':'#'}
f2(*args,**kw)
print('第9行:')
#下面使用tuple和dict,调用上述函数
args=(1,2,3,4)
kw={'d':99,'x':'#'}
f1(*args,**kw) # 如果args中只有一个参数,要带上逗号
print('第10行:')
#函数f2中有2个必选参数,1个默认参数,1个命名关键字参数,1个关键字参数
#由于args中有4个参数,赋给必选参数和默认参数之后,还会多一个参数,
#因为f2中没有可变参数args,所以会报错
args=(1,2,3,4)
kw={'d':99,'x':'#'}
f2(*args,**kw)
运行结果如图:

网友评论