Python参数传递及收集机制原理解析

2020-10-06 0 691

python参数传递时,主要有位置参数和关键字参数。

1. 位置参数:顾名思义,参数的位置顺序很重要,因为是直接根据位置赋值的。

def func1(a, b):
  print(a,b) # 位置参数,位置顺序很重要
func1(1,2)

Python参数传递及收集机制原理解析

2. 关键字参数:首先使得位置不那么重要了,毕竟参数一多,有些人记不住位置也很正常;其次更重要的是可以提供初始值。

def func2(c=1, d=2):
  print(c,d) # 关键字参数,1. 使得位置不那么重要;2. 可提供初始值
func2()  #使用初始值
func2(100,200) #关键字参数也可用位置参数的传递形式
func2(c=100,d=200) #变换位置
func2(d=200,c=200)

Python参数传递及收集机制原理解析

3. 位置参数和关键字参数混合时,位置参数必须全部在关键字参数的前面。

def func3(a, b, c=1):
  print(a,b,c) # 混合使用时,位置参数必须在前面,否则程序会不知道位置参数对应的值是什么
func3(1,2,100)
func3(1,2,c=100)

Python参数传递及收集机制原理解析

4. 通过单星号 \’*\’,收集位置参数,形成元组,但使用的时候也是有序的。

p = (1,2,)
def func4(*para): # 存多个参数,位置参数收集形成元组
  print(para)
func4(*p)  #传递的也是元组形式
func4(*(1,2,))

Python参数传递及收集机制原理解析

5. 通过双星号 \’**\’,收集关键字参数,形成字典

arg = {\'c\':1,\'d\':2}
def func5(**args): # 存多个参数,关键字参数收集形成字典
  print(args)
  print(args[\'c\'])
func5(**arg)  #传递形式一
func5(**{\'c\':1,\'d\':2}) # 二,或者显式传递字典

Python参数传递及收集机制原理解析

6. 位置参数和单星号 \’*\’ 收集参数的混合:单星号 \’*\’ 表示收集没有对应位置参数的其他位置参数

def func6(a, b, *para): # 混合位置参数,*表示收集没有对应位置参数的其他位置参数,即从前排到后,多余的位置参数
  print(a,b)
  print(\'para:\',para)
func6(1,2,3,4,5)

Python参数传递及收集机制原理解析

7. 关键字参数和双星号 \’**\’ 收集参数的混合:同理双星号 \’**\’ 表示收集没有对应关键字参数的其他关键字参数

def func7(c=1, d=2, **args): # 混合关键字参数,**表示收集没有对应关键字参数的其他关键字参数,即多余的关键字参数
  print(c,d)
  print(\'args:\',args)
func7(1,d=2,e=3,f=4)

Python参数传递及收集机制原理解析

8. 位置参数、关键字参数混合单星号收集参数、双星号收集参数:

def func(a, b, c=1, d=2, *ee, **ff): #混合关键字参数和位置参数:*和** 分别收集多余的位置参数和关键字参数
  print(a,b,c,d)
  print(ee) #元组形式使用
  print(ff) #字典形式使用
# func(100,200,300,400,c=500,d=600,e=700,f=800) # TypeError: func() got multiple values for argument \'c\',原因是关键字参数也可以按照位置参数传递形式赋值
func(100,200,c=500,d=600,e=700,f=800)
func(100,200,300,400,500,600,e=700,f=800) #从前到后多余的参数分别进入元组(单星号)和字典形式(双星号)

TypeError: func() got multiple values for argument:因为关键字参数也是可以像位置参数那样直接传递的。

Python参数传递及收集机制原理解析

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自学编程网。

遇见资源网 Python Python参数传递及收集机制原理解析 http://www.ox520.com/25928.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务