2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > Python的位置参数 默认参数 关键字参数 可变参数之间的区别

Python的位置参数 默认参数 关键字参数 可变参数之间的区别

时间:2020-07-07 19:59:50

相关推荐

Python的位置参数 默认参数 关键字参数 可变参数之间的区别

1. 位置参数

调用函数时需根据定义的参数位置来传参

def print_hello(name, sex):print('hello %s %s, welcome to python world!' % (name, '先生'))print_hello('Nick', '先生')# 输出:hello Nick 先生, welcome to python world!

位置参数必须严格按照顺序传参

2. 关键字参数

在函数调用时,通过"键值对"形式作为函数的形参,不用按照位置给函数传参

注意:

关键字参数必须在位置参数右边→对同一个形参不能重复传值

'''遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!'''# 按照顺序为函数形参传值def msg(name, age, sex):print("Hello, your name is %s, age is %s, sex is %s" % (name, age, sex))msg('Nick', 23, 'male')# 输出:Hello, your name is Nick, age is 23, sex is male# 有位置参数和关键字参数时,关键字参数在位置参数后面msg('Tony', 12, sex='male')# 参数中有多个关键字参数时,关键字参数不分先后顺序msg(sex='female', name='Amy', age=56)

3. 默认参数

在定义函数时,可以为形参提供默认值。对于有默认值的形参,调用函数时如果为该参数传值,则使用传入值,否则使用默认值

注意:

在调用函数时可以不给有默认值的形参传值无论函数的定义还是调用,默认参数的定义应该在位置形参右边只在定义时赋值一次默认参数通常应该定义成不可变类型

# 正确的默认参数定义方式-->位置参数在前,默认参数灾后def print_hello(name, city='Shenzhen'):print('%s live in %s' % (name, city))print_hello('Henry')# 输出:Henry live in Shenzhen# 错误的定义方式# def print_hello2(city='Shenzhen', name):#pass# 如果使用的是PyCharm IDE,输入完函数头部时就会提示出错# 调用时传入city值,则默认值不会被使用print_hello('Kevin', 'Beijing')# 输出:Kevin live in Beijing

4. 可变参数

定义函数时,有时候我们不确定调用的时候会传递多少个参数(不传参也行)。此时,可用包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递。

包裹位置传递

'''遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!'''def func(*args):print(type(args)) # 传入的参数会被视作一个元组print(args)for x in args:print(x)func(1)func(1, 2, 3)# 输出:# <class 'tuple'># (1,)# 1# <class 'tuple'># (1, 2, 3)# 1# 2# 3

包裹关键字传递

def func(**kwargs):print(type(kwargs))print(kwargs)for k, v in kwargs.items():print(k, ": ", v)func(a=1)func(a=1, b=2, c=3)# 输出:# <class 'dict'># {'a': 1}# a : 1# <class 'dict'># {'a': 1, 'b': 2, 'c': 3}# a : 1# b : 2# c : 3

位置参数,默认参数,可变参数的混合使用,使用顺序是:位置参数 --> 默认参数 --> 包裹位置参数 --> 包裹关键字(定义和调用都要遵循)

'''遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!'''def func(name, age, sex=1, *args, **kwargs):print('位置参数:')print(args)print('默认参数')print(sex)print('*args参数(即可变参数--被当做元组处理)')for x in args:print(x)print('**kwargs参数(被当做字典处理)')for k, v in kwargs.items():print(k, ": ", v)func('Cate', 14, 0, 'friendly', 'talented', 'easy-going', company='Apache', salary=30000)# 输出:# 位置参数:# ('friendly', 'talented', 'easy-going')# 默认参数# 0# *args参数(即可变参数--被当做元组处理)# friendly# talented# easy-going# **kwargs参数(被当做字典处理)# company : Apache# salary : 30000

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。