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接收关键字参数作为字典 # 函数传值的时候,你可以只按照位置传值 # 函数传值的时候,你可以只按照关键字传值 # 函数传值的时候,你可以混合位置和关键字传值,但是要注意位置传值要放在按关键字传值前面,而且参数会覆盖函数中默认值