`
kaozjlin
  • 浏览: 116420 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

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