该文章为学习廖雪峰老师的python总结,原文为 函数的参数
位置参数
def power(x, n):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
其中x和n就是位置参数,这两个参数在函数中是必填的,如果不填就会报错
默认参数
def enroll(name, gender, age=6, city='Beijing'):
print('name:', name)
print('gender:', gender)
print('age:', age)
print('city:', city)
默认参数其实就是位置参数的小升级,在函数调用提升了拓展性的同时,也兼容了以前函数的可用性,即在原有函数上添加一个默认值参数,增添了灵活性。
可变函数
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
可变函数就比较有意思了。
def calc(numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
如上代码所示,本来是一个位置函数,但是要求传入的是一个可迭代对象(list、’tuple等等),看到廖雪峰老师的迭代这一块儿的应该知道(Iterable),意思是指可迭代的,可变函数的作用就是简化入参(不要求是Iterator),而是改为一个个数据,但是要函数后面的参数前面加个*,代表这是一个可变函数。所传参数会自动转化为一个tuple运行,所以要求传入的是一个个的参数而不是list或者tuple,如果实在需要,需要在前面加一个*,(可以叫逆运算吧,哈哈)
关键字参数
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
kw传入的是key=value格式,跟可变参数类似,如果是一个dict,可以在dict前面加上一个**,结果为**dict
命名关键字参数
def person(name, age, *, city, job):
print(name, age, city, job)
关键字参数可以传入随意的参数,命名关键字参数要求传入要求的关键字,感觉没有位置参数实用,都是要求必填的,为什么要选择在中间加一个*,改名叫命名关键字参数?可能我还没有理解他的深意
看了一些文档以后知道命名关键字参数使用的场景比默认参数多得多,因为现在很多方法有很多的传参,而调用方法的人不会去记方法里的参数使第几个,而是选择记住方法名叫什么,这个是两者最直观的区别
命名关键字参数和默认参数的却别
这篇文章的一条评论总结的还不错的,但是我没看完,后续有时间再研究下