简述Python中的*args和**kwargs?
*args和**kwargs主要用于定义函数的可变参数;
*args:发送一个非键值对的可变数量的参数列表给函数;
**kwargs:发送一个键值对的可变数量的参数列表给函数;
*和**作用:打包参数;
例如:
# *args测试
def test_args(*args):
print(args)
# **kwargs测试
def test_kwargs(**kwargs):
print(kwargs)
print(type(kwargs))
for key,value in kwargs.items():
print("{}=={}".format(key,value))
# *args和**kwargs测试
def test_all(*args,**kwargs):
print(args)
print(kwargs)
if __name__=="__main__":
# 测试一:
# *将"name","age","address","sex"打包成元组("name","age","address","sex"),赋值给args
test_args("name","age","address","sex")
# 测试二:
# **将name="张三",age=18,address="Shanghai"打包成字典{"name"="张三","age"=18,"address"="Shanghai"},赋值给kwargs
test_kwargs(name="张三",age=18,address="Shanghai")
# 测试三:
# args:("name","age");
# kwargs:{"name":"张三","age":18}
test_all("name","age",name="张三",age=18)
Python函数调用的时候参数传递方式是值传递,还是引用传递?
值传递:适用于实参为不可变类型(数字;字符串;元组)
引用传递(地址传递):适用于实参为可变类型(列表;字典)
值传递和引用传递的区别:函数参数进行值传递后,若形参的值发生改变,不会影响实参的值;而函数参数进行引用传递后,若形参的值发生改变,实参的值也会一同改变。