备注:
#位置参数
#传入两个参数
def power(x, n):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
power(5,3)
#power(5) power() missing 1 required positional argument: 'n'
#少了一个参数位
def power(x, n=2):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
#可以默认n是2
def enroll(name, gender):
print ('name:', name)
print ('gender:', gender)
#后面想要加入一些参数
def enroll(name, gender, age=6, city = 'beijing'):
print ('name:', name)
print ('gender:', gender)
print ('age:', age)
print ('city:', city)
enroll('fdf', 'G')
#只传入了两个,一个name 一个gender,所以age city都是选择了默认
'''
name: fdf
gender: G
age: 6
city: beijing
'''
#当然可以传入4个
enroll('li', 'F', '7', 'shanghai')
'''
name: li
gender: F
age: 7
city: shanghai
'''
#可变参数
#定义函数,必须要定义函数需要接受多少函数, 有的时候不知道,就需要接受可变数量参数了
#加一个*
def enroll(name, gender, *other):
print ('name:', name)
print ('gender:', gender)
print (other)
enroll('adf', 'f', 'dafdf', 'afd')
'''
name: adf
gender: f
('dafdf', 'afd')
'''
#最后的参数用元组来容纳,能对应的进行对应,不能对应都放在元组了
enroll('fdf', 'G')
'''
name: fdf
gender: G
()
'''
num = [1,2,3]
#元组应该也可以
#然后传入
enroll(*num)
'''
name: 1
gender: 2
(3,)
'''
#关键字参数
#加两个** 变成字典了
def person(name, age, **kw):
print ('name:', name)
print ('age:', age)
print ('other:', kw)
person('fdf', 30)
'''
name: fdf
age: 30
other: {}
'''
person('Bob', 35, city='Beijing')
'''
name: Bob
age: 35
other: {'city': 'Beijing'}
'''
#主要功能是扩展函数的功能
extra = {'1':1, '2':2}
person('Bob', 35, city='Beijing',**extra)
'''
name: Bob
age: 35
other: {'city': 'Beijing', '1': 1, '2': 2}
'''
#可以先组装dict,然后传入
#命令关键字参数
#这个就是已经前面有参数,然后我们希望在关键字参数内部进行检查,看有没有需要的参数
def person(name, age, **kw):
if 'city' in kw:
pass
if 'job' in kw:
pass
print ('name:', name)
print ('age:', age)
print ('other:', kw)
#但是即使这样定义,还是可以继续向之前一样随便传,传进来的也是在other里面
person('dad', '22', city='Beijing', addr='Chaoyang', zipcode=123456)
'''
name: dad
age: 22
other: {'city': 'Beijing', 'addr': 'Chaoyang', 'zipcode': 123456}
'''
def person(name, age, * ,city, job):
print ('name:', name)
print ('age:', age)
print ('city:', city)
print ('job:', job)
#这里区别就出来了,如果关键字参数里面没有city 没有job 参数就会报错
#这里不一样的是,和**kw 不一样的是,这里用* 分隔,后面的是命名关键字参数
'''
person('dad', '22', city='Beijing', addr='Chaoyang', zipcode=123456)
#这个没有job的参数,是会报错的
'''
person('Jack', 24, city='Beijing', job='Engineer')
'''
name: Jack
age: 24
city: Beijing
job: Engineer
'''
'''
person('Jack', 24, 'Beijing', 'Engineer')
#这里调用,没有city job 的参数,python是按照位置参数进行传递的,也会报错
'''
#命名关键字参数 也是可以赋值的,这样,可以省略传值,然后可以少工作量
def person(name, age, * ,city = 'shanghai', job):
print ('name:', name)
print ('age:', age)
print ('city:', city)
print ('job:', job)
person('bob', 20, job='worker')
'''
name: bob
age: 20
city: shanghai
job: worker
'''
20171222更新
#参数组合
def f1(a, b, c=0, *args, **kw):
print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
#定义了f1
f1(1, 2)
# a = 1 b = 2 c = 0 args = () kw = {}
f1(1, 2, c=3)
# a = 1 b = 2 c = 3 args = () kw = {}
f1(1, 2, 3, 'a', 'b')
# a = 1 b = 2 c =3 args = ('a', 'b') kw = {}
f1(1, 2, 3, 'a', 'b', x=99)
# a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x':99}
def f2(a, b, c=0, *, d, **kw):
print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)
#定义了f2
f2(1, 2, d=99, ext=None)
# a = 1 b = 2 c = 0 d = 99 kw = {'ext':None}
#可变参数可以直接传入,也可以组装tuple list 用*传入
#关键字参数 可以直接传,也可以组装dict 用**传入
#命名关键字参数,用* 分隔,要不然就成了位置参数
#定义命名的关键字参数不要忘了写分隔符*,否则定义的将是位置参数
浙公网安备 33010602011771号