算法岗面试总结—Python篇(第三题)
YouOnly_LiveOnce
2022年04月07日 12:28
收录于文集
共11篇
  • 简述Python中的*args和**kwargs?

  • *args和**kwargs主要用于定义函数的可变参数;

  • *args:发送一个非键值对的可变数量的参数列表给函数;

  • **kwargs:发送一个键值对的可变数量的参数列表给函数;

  • *和**作用:打包参数;

  • 例如:

代码块
Python
自动换行
复制代码
# *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函数调用的时候参数传递方式是值传递,还是引用传递?

  • 值传递:适用于实参为不可变类型(数字;字符串;元组)

  • 引用传递(地址传递):适用于实参为可变类型(列表;字典)

  • 值传递和引用传递的区别:函数参数进行值传递后,若形参的值发生改变,不会影响实参的值;而函数参数进行引用传递后,若形参的值发生改变,实参的值也会一同改变。