`
kjava
  • 浏览: 77400 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

转:Python中函数参数的传递

阅读更多
转:Python中函数参数的传递
2008-09-10 11:28
Python中函数参数的传递是通过“赋值”来传递的。但这条规则只回答了函数参数传递的“战略问题”,并没有回答“战术问题”,也就说没有回答怎么赋值的问题。函数参数的使用可以分为两个方面,一是函数参数如何定义,二是函数在调用时的参数如何解析的。而后者又是由前者决定的。函数参数的定义有四种形式: 1. F(arg1,arg2,...) 2. F(arg2=,arg3=...) 3. F(*arg1) 4. F(**arg1) 第1 种方式是最“传统”的方式:一个函数可以定义不限个数参数,参数(形式参数)放在跟在函数名后面的小括号中,各个参数之间以逗号隔开。用这种方式定义的函数在调用的时候也必须在函数名后的小括号中提供相等个数的值(实际参数),不能多也不能少,而且顺序还必须相同。也就是说形参和实参的个数必须一致,而且想给形参1的值必须是实参中的第一位,形参与实参之间是一一对应的关系,即“形参1=实参1 形参2=实参2...”。很明显这是一种非常不灵活的形式。比如:"def addOn(x,y): return x + y",这里定义的函数addOn,可以用addOn(1,2)的形式调用,意味着形参x将取值1,主将取值2。addOn(1,2,3)和addOn (1)都是错误的形式。第2种方式比第1种方式好一点,在定义的时候已经给各个形参定义了默认值。因此,在调用这种函数时,如果没有给对应的形式参数传递实参,那么这个形参就将使用默认值。比如:“def addOn(x=3,y=5): return x + y”,那么addOn(6,5)的调用形式表示形参x取值6,y取值5。此外,addOn(7)这个形式也是可以的,表示形参x取值7,y取默认值5。这时候会出现一个问题,如果想让x取默认值,用实参给y赋值怎么办?前面两种调用形式明显就不行了,这时就要用到Python中函数调用方法的另一大绝招 ──关健字赋值法。可以用addOn(y=6),这时表示x取默认值3,而y取值6。这种方式通过指定形式参数可以实现可以对形式参数进行“精确攻击”,一个副带的功能是可以不必遵守形式参数的前后顺序,比如:addOn(y=4,x=6),这也是可以的。这种通过形式参数进行定点赋值的方式对于用第1种方式定义的函数也是适用的。上面两种方式定义的形式参数的个数都是固定的,比如定义函数的时候如果定义了5个形参,那么在调用的时候最多也只能给它传递5个实参。但是在实际编程中并不能总是确定一个函数会有多少个参数。第3种方式就是用来应对这种情况的。它以一个*加上形参名的方式表示,这个函数实际参数是不一定的,可以是零个,也可以是N个。不管是多少个,在函数内部都被存放在以形参名为标识符的tuple中。比如:对这个函数的调用addOn() addOn(2) addOn(3,4,5,6)等等都是可以的。与第3种方式类似,形参名前面加了两个*表示,参数在函数内部将被存放在以形式名为标识符的dictionary中。这时候调用函数必须采用key1=value1、key2=value2...的形式。比如: 1. def addOn(**arg): 2. sum = 0 3. if len(arg) == 0: return 0 4. else: 5. for x in arg.itervalues(): 6. sum += x 7. return sum 那么对这个函数的调用可以用addOn()或诸如addOn(x=4,y=5,k=6)等的方式调用。上面说了四种函数形式定义的方式以及他们的调用方式,是分开说的,其实这四种方式可以组合在一起形成复杂多样的形参定义形式。在定义或调用这种函数时,要遵循以下规则: 1. arg=必须在arg后 2. *arg必须在arg=后 3. **arg必须在*arg后在函数调用过程中,形参赋值的过程是这样的:首先按顺序把“arg”这种形式的实参给对应的形参第二,把“arg=”这种形式的实参赋值给形式第三,把多出来的“arg”这种形式的实参组成一个tuple给带一个星号的形参第四,把多出来的“key=value”这种形式的实参转为一个dictionary给带两个星号的形参。听起来好复杂,实际是是很简单的。很直观,来看例子: 1. def test(x,y=5,*a,**b): 2. print x,y,a,b 就这么一个简单函数,来看看下面对这个函数调用会产生什么结果: test(1) ===> 1 5 () {} test(1,2) ===> 1 2 () {} test(1,2,3) ===> 1 2 (3,) {} test(1,2,3,4) ===> 1 2 (3,4) test(x=1) ===> 1 5 () {} test(x=1,y=1) ===> 1 1 () {} test(x=1,y=1,a=1) ===> 1 1 () {'a':1} test(x=1,y=1,a=1,b=1) ===> 1 1 () {'a':1,'b':1} test(1,y=1) ===> 1 1 () {} test(1,2,y=1) ===> 出错,说y给赋了多个值 test(1,2,3,4,a=1) ===> 1 2 (3,4) {'a':1} test(1,2,3,4,k=1,t=2,o=3) ===> 1 2 (3,4) {'k':1,'t':2,'o':3}
分享到:
评论

相关推荐

    Python程序设计:函数参数.pptx

    我们将从本任务出发,较为系统的学习Python中函数的定义、调用、函数的形参定义、函数的参数传递以及匿名函数和生成器函数等内容,并掌握相关的配套案例。 任务 IQ智商测试 任务知识点 函数定于与调用 函数参数 匿名...

    第六章Python函数习题及答案--中文

    6.13 节函数的参数传递:函数可以使用参数来传递值,可以使用位置参数或关键字参数来传递值。 6.14 节函数的参数传递:函数也可以使用关键字参数来传递值。 6.15 节按值传递参数:使用参数调用函数时,参数的值将...

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

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

    python函数实验报告.doc

    本实验报告主要涵盖了Python编程中的函数使用,包括函数的定义、参数传递、变量作用域以及模拟内置函数等多个方面。通过一系列的任务,旨在帮助学习者掌握Python函数的核心概念和实际应用。 1. **函数的定义与使用*...

    Python:Python函数与模块教程

    #### 二、参数传递:位置参数与关键字参数 函数可以接受两种类型的参数:位置参数和关键字参数。 - **位置参数**:根据它们在函数调用中的位置来匹配函数定义中的参数。 - **关键字参数**:明确指定参数名称,允许...

    07-1:Python课程 教程 进阶 PYTHON函数:参数列表、内存分配、设计原则、递归

    在本“07-1:Python课程 教程 进阶 PYTHON函数:参数列表、内存分配、设计原则、递归”的教程中,我们将深入探讨Python编程语言中的关键概念,特别是与函数相关的高级主题。这些主题对于任何希望在Python领域深化...

    深入理解python中函数传递参数是值传递还是引用传递

    本文将通过具体的代码示例和内存地址分析,帮助读者更深入地理解Python函数参数传递的本质。 #### Python中参数传递的基本原理 Python函数参数传递本质上是基于对象的引用。这意味着当我们将一个对象作为参数传递...

    Python中函数参数设置及使用的学习笔记

    在Python中,函数参数通过赋值的方式传递。当函数被调用时,实际上是在共享对象的引用。这种特性对于不可变对象(如整数)来说,其在函数内部的任何变化都不会影响到原始对象;但对于可变对象(如列表),则有可能...

    TDDOWNLOAD\Perl 与 Python 之间的一些异同

    Perl倡导的“多途径完成任务”与Python坚持的“最佳单一途径”哲学形成鲜明对比,这种差异也体现在两者的语法设计和社区文化中。 ### Perl与Python的基本数据类型对比 #### Perl - **标量(Scalar)**:用于存储...

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

    - 当调用函数时,使用`*`运算符可以将元组或列表的元素作为单独的参数传递,而`**`运算符可以将字典的键值对作为关键字参数传递。 - 示例中展示了如何使用`*params`来传递元组 `(1, 2)` 给 `add` 函数,以及如何...

    Python函数中参数是传递值还是引用详解

    在探讨Python函数参数传递机制之前,我们首先需要理解Python中变量与对象的关系。不同于C/C++等语言,Python中的变量更像是对象的引用或标签,而不是一个单独的内存空间。因此,理解Python中的参数传递方式,必须先...

    110道Python面试题:.pdf

    Python 中的 *args 和 kwargs 是函数参数的语法糖。*args 表示可变数量的参数,kwargs 表示关键字参数。 8. Python2 和 Python3 的 range() 函数的区别 Python2 中的 range() 函数返回一个列表,Python3 中的 ...

    图书:Python基本参考

    3. **函数**:Python中的函数是一等公民,可以作为参数传递,也可以作为返回值。函数定义使用`def`关键字,支持默认参数、可变参数(*args, **kwargs)。 4. **模块和包**:Python的模块化设计使得代码可重用性增强...

    向python脚本传递参数(例子)

    ### 向Python脚本传递参数知识点详解 在Python编程中,能够从命令行接收参数是一项非常实用的功能。本文将深入探讨如何使用`sys.argv`来接收命令行参数,并通过一个具体的示例——过滤文本文件中的特定关键字——来...

    Python中的函数(课件)

    在Python编程语言中,函数是组织良好、可重用的代码块,它们...总之,Python中的函数是编程的核心组成部分,理解并熟练掌握函数的定义、参数传递、变量作用域以及递归和lambda表达式,将大大提升编程效率和代码质量。

    python-传递函数.docx

    这意味着函数可以像整数、字符串或其他数据类型一样被赋值给变量、存储在数据结构中,甚至作为参数传递给其他函数。 在函数传递中,我们可以定义一个函数,然后在另一个函数内部使用它,而不是硬编码具体的计算逻辑...

    【pythonPHP】Python中函数详解共7页.pdf

    Python中的函数是第一类对象,这意味着它们可以被赋值给变量,作为参数传递,也可以作为其他函数的返回值。本资料"【pythonPHP】Python中函数详解共7页.pdf"将深入探讨Python函数的关键概念。 1. **定义函数**:...

    收集的C调用Python函数资料

    参数列表是一个`PyObject*`指针的数组,表示传递给Python函数的参数。 6. **处理返回值**: Python函数的返回值也是`PyObject*`类型,可能需要转换回C的数据类型。根据返回值类型选择合适的转换函数,如`PyLong_...

    2021:Python快速入门

    我们可以定义自己的函数,使用`def`关键字,参数传递可以是位置参数、默认参数、可变参数和关键字参数。函数还可以返回多个值,以及使用`lambda`表达式创建匿名函数。 7. **文件操作**: Python提供了丰富的文件...

Global site tag (gtag.js) - Google Analytics