`

python 函数参数的传递(参数带星号的说明)

阅读更多

python中函数参数的传递是通过赋值来传递的。函数参数的使用又有俩个方面值得注意:1.函数参数是如何定义的 2.在调用函数的过程中参数是如何被解析

先看第一个问题,在python中函数参数的定义主要有四种方式:
1.F(arg1,arg2,...)
这是最常见的定义方式,一个函数可以定义任意个参数,每个参数间用逗号分割,用这种方式定义的函数在调用的的时候也必须在函数名后的小括号 里提供个数相等的值(实际参数),而且顺序必须相同,也就是说在这种调用方式中,形参和实参的个数必须一致,而且必须一一对应,也就是说第一个形参对应这 第一个实参。例如:
def a(x,y):
    print x,y
调用该函数,a(1,2)则x取1,y取2,形参与实参相对应,如果a(1)或者a(1,2,3)则会报错。


2.F(arg1,arg2=value2,...)
这种方式就是第一种的改进版,提供了默认值
def a(x,y=3):
    print x,y
调用该函数,a(1,2)同样还是x取1,y取2,但是如果a(1),则不会报错了,这个时候x还是1,y则为默认的3。上面这俩种方式,还可以更换参数位置,比如a(y=8,x=3)用这种形式也是可以的。


3.F(*arg1)
上面俩个方式是有多少个形参,就传进去多少个实参,但有时候会不确定有多少个参数,则此时第三种方式就比较有用,它以一个*加上形参名的方式来表示这个函 数的实参个数不定,可能为0个也可能为n个。注意一点是,不管有多少个,在函数内部都被存放在以形参名为标识符的tuple中。
>>> def a(*x):
if len(x)==0:
   print 'None'
else:
   print x
>>> a(1)
(1,)        #存放在元组中
>>> a()
None
>>> a(1,2,3)
(1, 2, 3)
>>> a(m=1,y=2,z=3)

Traceback (most recent call last):
File "<pyshell#16>", line 1, in -toplevel-
    a(m=1,y=2,z=3)
TypeError: a() got an unexpected keyword argument 'm'


4.F(**arg1)
形参名前加俩个*表示,参数在函数内部将被存放在以形式名为标识符的dictionary中,这时调用函数的方法则需要采用arg1=value1,arg2=value2这样的形式。
>>> def a(**x):
if len(x)==0:
   print 'None'
else:
   print x  
>>> a()
None
>>> a(x=1,y=2)
{'y': 2, 'x': 1}      #存放在字典中
>>> a(1,2)            #这种调用则报错

Traceback (most recent call last):
File "<pyshell#25>", line 1, in -toplevel-
    a(1,2)
TypeError: a() takes exactly 0 arguments (2 given)


上面介绍了四种定义方式,接下来看函数参数在调用过程中是怎么被解析的,其实只要记住上面这四种方法优先级依次降低,先1,后2,再3,最后4,也就是先把方式1中的arg解析,然后解析方式2中的arg=value,再解析方式3,即是把多出来的arg这种形式的实参组成个tuple传进去,最后把剩下的key=value这种形式的实参组成一个dictionary传给带俩个星号的形参,也就方式4
>>> def test (x,y=1,*a,**b):
print x,y,a,b


>>> test(1)
1 1 () {}
>>> test(1,2)
1 2 () {}
>>> test(1,2,3)
1 2 (3,) {}
>>> test(1,2,3,4)
1 2 (3, 4) {}
>>> test(x=1,y=2)
1 2 () {}
>>> test(1,a=2)
1 1 () {'a': 2}
>>> test(1,2,3,a=4)
1 2 (3,) {'a': 4}
>>> test(1,2,3,y=4)

Traceback (most recent call last):
File "<pyshell#52>", line 1, in -toplevel-
    test(1,2,3,y=4)
TypeError: test() got multiple values for keyword argument 'y'

分享到:
评论

相关推荐

    python下函数参数的传递(参数带星号的说明)

    在调用函数的过程中参数是如何被解析先看第一个问题,在python中函数参数的定义主要有四种方式: 1.F(arg1,arg2,…) 这 是最常见的定义方式,一个函数可以定义任意个参数,每个参数间用逗号分割,用这种方式定义的...

    python星号参数

    在Python编程语言中,星号参数(*args和**kwargs)是一种特殊的参数形式,它允许函数接受不定数量的参数。星号参数的使用可以增加函数的灵活性,使得函数能够处理变化的参数数量。根据给定文件提供的内容,我们可以...

    python函数和函数传参ppt.pptx

    可变数量参数则允许函数接收任意数量的参数,这通过在参数前添加星号(*)来实现,如`vfunc(a, *b)`,其中`b`将接收到所有剩余的参数作为一个元组。 在调用函数时,可以按位置或按名称传递参数。按名称传递参数允许...

    Python实现接受任意个数参数的函数方法

    通过在参数名前加星号(*)可以实现可变位置参数,而加两个星号(**)则可以实现可变关键字参数,这为函数的输入提供了极大的便利,是Python语言中一个非常强大的特性。尽管在某些情况下可能不常用,但它仍然是一个...

    python中factor函数-Python基础教程.pdf

    - Python允许在函数定义时使用星号(*)和双星号(**)来收集不定数量的位置参数和关键字参数。 - 当调用函数时,使用`*`运算符可以将元组或列表的元素作为单独的参数传递,而`**`运算符可以将字典的键值对作为关键字...

    Python函数参数操作详解

    - 可以使用星号操作符将列表或元组的元素解包为位置参数,或者将字典的键值对解包为关键字参数。 - 例如,`greet(*(['Hi', 'Kobe'], ['I want to challenge you!']))` 和 `greet(**{'say': 'Hi', 'name': 'Kobe', ...

    Python科学计算与数据处理-Python函数.ppt

    - 可变参数(不定长参数)可以用星号(*)表示,如`def functionname(*args):`,允许接收任意数量的位置参数。 4. 示例: - 当调用带默认参数的函数时,可以使用关键字调用来明确指定参数,如`f(arg1=10, arg2=10...

    精品课件 Python从入门到精通 第9章 函数(共18页).ppt

    5. **关键字可变参数**:允许传递任意数量的关键字参数,用两个星号(**)表示,如`def function_name(**kwargs)`,`kwargs`将是一个字典。 接下来,我们要了解变量的作用域。Python中的变量分为两种主要类型: 1. *...

    python函数的定义方式.docx

    使用星号`*`来表示可变数量的非关键字参数,这些参数会被收集到一个元组中。例如,`add_numbers(*args)`函数可以接受任意数量的数字,并将它们相加: ```python def add_numbers(*args): result = 0 for number...

    python函数(csdn)————程序.pdf

    例如,以下代码中,`print_it1` 函数使用星号(*)来表示不定长参数,而 `print_it2` 函数使用双星号()来表示不定长参数: ``` def print_it1(*num): print(num) def print_it2(num): print(num) ``` Python 函数是...

    Python基础教程:函数参数和注解.pdf

    本教程将深入探讨Python函数中的四种参数类型:定位参数、可变参数、默认值参数和关键字参数,以及仅限关键字参数。 1. 定位参数(Positional Parameter) 定位参数是最常见的参数类型,它们按照函数定义中的顺序...

    完整详细版Python全套教学课件 第04-A节 01函数、参数及参数解构.pptx

    使用星号`*`来表示位置可变参数,它们会作为元组在函数内部可用: ```python def add(*nums): sum = 0 for x in nums: sum += x print(sum) ``` 上述函数`add`可以接收任意数量的位置参数,将其累加求和。调用...

    python函数的定义.doc

    3. **可变参数**:使用星号 `*` 前缀表示可变数量的位置参数,它们将作为一个元组 `tuple` 被传入函数,如 `functionname(*args)`。 4. **关键字参数**:使用关键字指定参数名,如 `functionname(param=value)`。...

    python函数参数(必须参数、可变参数、关键字参数)

    如果已有列表或元组,想传递给带有可变参数的函数,可以在调用时在列表或元组前加上星号(*),实现解包操作: ```python a = [4, 5, 6] loop(*a) # 输出:4 5 6 ``` 需要注意的是,可变参数应该位于函数参数列表的...

    深入探索Python中的参数解包:函数调用的艺术

    在Python编程中,参数...通过使用星号(*)和双星号(**)操作符,我们可以在函数调用时解包序列和映射,从而传递任意数量的位置参数和关键字参数。掌握参数解包的使用,将使你能够编写出更加灵活和强大的Python代码。

    Python:Python函数与模块教程

    在函数定义中,使用星号`*`前缀来收集额外的位置参数,使用双星号`**`前缀来收集额外的关键字参数。 例如: ```python def make_pizza(size, *toppings): """ 打印制作披萨的配料 参数: size (int): 披萨的...

    PYTHON学习教程资源:函数的参数.docx

    Python函数的参数是编程中的重要概念,它允许我们将数据传递给函数进行处理。在Python中,函数的参数定义和使用非常灵活,包括位置参数、默认参数、可变参数和关键字参数。下面我们将深入探讨这些参数类型及其应用。...

    python 通过可变参数计算n个数的乘积方法

    - 在函数定义时,形参前加上星号`*`表示该参数为可变参数。例如,`def func(*args)`。 - 这样的函数可以接收任意数量的位置参数,所有传入的参数会被收集到一个元组`args`中。 - **调用带有可变参数的函数**: - ...

    深入讲解Python函数中参数的使用及默认参数的陷阱

    有两种方式处理可变参数:一是通过在参数名前加星号(*),这样函数内部会将所有额外的参数打包成一个元组;二是直接传入列表或元组。例如,`calc(*numbers)`函数就能处理任意数量的数字求和。 最后,关键字参数允许...

Global site tag (gtag.js) - Google Analytics