位置参数
def enroll(name,gender):
print('name: ', name)
print('gender: ', gender)
enroll('张三丰','本科')
默认参数
def enroll(name, gender, age=66, city='Wudang'):
print('name: ', name)
print('gender: ', gender)
print('age: ', age)
print('city: ', city)
enroll('张三丰','本科')
默认参数值可在调用函数传入参数时修改,对于不符合默认值的默认参数,可在传入时进行修改
eg:
def enroll(name, gender, age=66, city='Wudang'):
print('name: ', name)
print('gender: ', gender)
print('age: ', age)
print('city: ', city)
enroll('张三丰','本科',age=55)
默认参数必须指向不变参数
L=[]
def add_end(L):
L.append('END')
return L
add_end(L)#问题很大,这段程序写在PE里没有错,始终只返回'END',然而在解释器中却会出现不断重复的'END'结果
可变参数(传入参数的个数是可变的)
list,tuple参数
def cacl(number):
s = 0
for i in number:
s = s + i*i
return s
print(cacl([3,4]))
*参数简化
def cacl(*number):
s = 0
for i in number:
s = s + i*i
return s
print(cacl(3,4))
*number表示把number这个list的所有元素作为可变参数传进去。
关键字参数在函数内自动组装成一个dict,用于扩展函数功能,可写入必选参数之外的更多信息
def person(name, age, **kw):#**关键字参数前面两个星星**,关键字参数在调用时可以不写的
print('name: ', name, 'age: ', age, 'other: ', kw)
person('Michael', 30)
person('Bob', 35, city='Beijing')#以关键字参数的dict格式写入非必选参数
person('Adam', 45, gender='M', job='Engineer')
extra={'city':'Beijing','job':'Engineer'}#在外部先组装一个dict,然后将dict写作关键字参数
person('Jack', 24, **extra)
命名关键字参数,对任意传入的关键字参数进行限制,只接受分隔符*后出现的关键字参数类型
命名关键字参数必须传入参数名,即在调用函数时写出参数名=参数值,如果不写参数名,则被视为位置参数
参数的写入顺序:必选参数,默认参数,可变参数,命名关键字参数,关键字参数
*args是可变参数,args接收的是一个tuple;
**kw是关键字参数,kw接收的是一个dict。
使用*args和**kw是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。
命名的关键字参数是为了限制调用者可以传入的参数名,同时可以提供默认值。
定义命名的关键字参数在没有可变参数的情况下不要忘了写分隔符*,否则定义的将是位置参数。
++
这里第三个函数调用将参数’a’,’b’赋给命名关键字参数,其实这里没有写参数名,是作为位置参数用的,??待续