3.2参数传递 

1.基本传参

把数据用参数的形式输入到函数,被称为参数传递。 Python会根据位置来确认数据对应哪个参数。

如果觉得位置传参比较死板,那么可以用关键字(Keyword)的方式 来传递参数。在定义函数时,我们给了形参一个符号标记,即参数名。

位置传递与关键字传递可以混合使用,即一部分的参数传递根据位 置,另一部分根据参数名。在调用函数时,所有的位置参数都要出现在关键字参数之前。


位置传递和关键字传递让数据与形参对应起来,因此数据的个数与 形参的个数应该相同。但在函数定义时,我们可以设置某些形参的默认值。如果我们在调用时不提供这些形参的具体数据,那么它们将釆用定 义时的默认值,比如:

def f(a,b,c=l0): print(f(3,2,l)) #参数c取传入的1。结果打印6 print(f (3^2)) #参数c取默认值10。结果打印15


2.包裹传参

以上传递参数的方式,都要求在定义函数时说明参数的个数。但有时在定义函数时,我们并不知道参数的个数。这时候,用包裹 (packing)传参的方式来进行参数传递会非常有用。

和之前一样,包裹传参也有位置和关键字两种形式,基于同一个package_position() 定义,所有的数据都根据先后顺序,收集到一个元组。在函数内部,我们可以通过元组来读取传入的数据。为了提醒Python参数all_arguments是包裹位置传递所用的元组名,我们在义package_position()时要在元组名all arguments前加*号。

这一参数传递方法把传入的 数据收集为一个词典:

def package_keyword(**all_arguments):
    print(type(all_arguments))

    print(all_arguments)

package_keyword(a=1,b=9)

package_keyword(m=2,n=3,c=1) 


________________________________________
<class 'dict'>
{'a': 1, 'b': 9}
<class 'dict'>
{'m': 2, 'n': 3, 'c': 1}def package_mix(*positions,**keywords):

    print(positions)
    print(keywords)

package_mix(1, 2, 3, a=7, b=8, c=9)
_______________________________________
(1, 2, 3)
{'a': 7, 'b': 8, 'c': 9}
还可以更进一步,把包裹传参和基本传参混合使用。它们出现的先后顺序是:位置一关键字…包裹位置…包裹关键字。

3.解包裹

除了用于函数定义,*和**还可用于函数调用。这时候,两者是为了 实现一种叫作解包裹(unpacking)的语法。解包裹允许我们把一个数据容器传递给函数,再自动地分解为各个参数。需要注意的是,包裹传参和解包裹并不是相反操作,而是两个相对独立的功能。下面是解包裹的 一个例子:

def unpackage(a,b,c):

    print(a,b,c)

args=(1,3,4)
unpackage(*args)
# 结果为 1 3 4

解包裹用于函数调用。在调用函数时,几种参数的传递方式也可以混合。

 

Python 传参enum python 传参数 大于号_开发语言