python基础-函数以及参数 *args 和 **kwargs

*args 和 **kwargs

定义函数的时候, *args 和 **kwargs作为收集参数使用, 也就是分别将传递的参数收集到这个里面去
调用函数的时候, *args 和 **kwargs作为解参数使用, 也就是在调用的时候将一堆定好的参数解散在调用的参数括号

# 定义函数的时候
def eat(*args, **kwargs):
    print(args, kwargs)


if __name__ == '__main__':
    eat('Rice', 'Fish', Fruit='Apple', Staple='Corn')
    # ('Rice', 'Fish') {'Fruit': 'Apple', 'Staple': 'Corn'}

    args = ('Rice', 'Fish')
    params = {"hello": 1, "world": 2}
    # 调用的时候
    eat(*args, **params)
    eat(*('Rice', 'Fish'), **{"hello": 1, "world": 2})
    # ('Rice', 'Fish') {'hello': 1, 'world': 2}

  

函数返回None,一值和返回多值

def add(x,y):
    sum=x+y
    return sum

a1 = add(1,2)
print(a1)
#3

a2 = add(add(1,2),3)
print(a2)
# 6
#将函数返回值作为参数,由内到外



#没返回return ,返回None
def foo():
    '''hello test'''
    print("hello")
print(foo())
print(foo.__doc__)


#一个返回,返回值
def add(x,y):
    sum=x+y
    return sum
print(add(1,2))


#多返回,返回元组
def dao(x):
    '''
    the function  is test
    '''
    return 1,2,3,{"name","alex"},["hello",1,3]

dao1 = dao(2)
print(dao1)   #多返回值,返回元组
# (1, 2, 3, {'alex', 'name'}, ['hello', 1, 3])

# 如果需要取出来,就依次赋值
a,b,c,d,e=dao(3)
print(a)
print(b)
print(c)
print(d)
print(e)


def tell_cmd():
    msg='''
    1 look 
    2 buy
    '''
    print(msg)





x='male'
def register(sex=x):
    print(sex)
#-----------------------调用阶段

register()

x=[]
def register1(name,name_list=x):
    name_list.append(name)

#-----------------------调用阶段

register1('hello')
register1('world')
register1('ada')
print(x)
#都在搞全局变量的值

def my_sum(*nums):
    res=0
    for i in nums:
        res+=i
print(my_sum(1,2,3,4,5,6,7))

  

 

函数传参的时候需要注意的事项:

def reg(username,password,sex="male"):
    print("username,password,sex 分别是:",username,password,sex)

def fun(*args,**kwargs):
    print("args:",args)
    print("kwargs:",kwargs)
    reg(*args,**kwargs)

fun("alex","123456")
# args: ('alex', '123456')
# kwargs: {}
# username,password,sex 分别是: alex 123456 male



fun("egon","123456","female")
# args: ('egon', '123456', 'female')
# kwargs: {}
# username,password,sex 分别是: egon 123456 female



fun(username="adamander",password="23456")
# args: ()
# kwargs: {'password': '23456', 'username': 'adamander'}
# username,password,sex 分别是: adamander 23456 male



# 在上面可以总结出,args将一般位置参数作为元组,kwargs接收关键字参数作为字典
# 函数传值的时候,你可以只按照位置传值
# 函数传值的时候,你可以只按照关键字传值
# 函数传值的时候,你可以混合位置和关键字传值,但是要注意位置传值要放在按关键字传值前面,而且参数会覆盖函数中默认值

  

 

posted @ 2017-09-08 16:16  Adamanter  阅读(150)  评论(0编辑  收藏  举报