liyihao

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

备注:

#位置参数
#传入两个参数
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  用**传入

#命名关键字参数,用*  分隔,要不然就成了位置参数
#定义命名的关键字参数不要忘了写分隔符*,否则定义的将是位置参数

  

posted on 2017-12-20 21:17  liyihao  阅读(211)  评论(0)    收藏  举报