python 函数参数的传递

[转载]python 函数参数的传递(参数带星号的说明)
www.diybl.com    时间 : 2011-08-20  作者:网络   编辑:hawk 点击:  15 [ 评论 ]
-
-


文章来源:http://www.51testing.com/?uid-88300-action-viewspace-itemid-102923

以下转自其它博客。觉得总结得太好了,所以拿来自己参考一下。

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'


文章出处:飞诺网(www.diybl.com):http://www.diybl.com/course/3_program/python/20110820/558709.html

转载于:https://www.cnblogs.com/SophiaTang/archive/2012/02/16/2354435.html

相关推荐

PHP服务端 苹果支付(IAP)处理

公司做的app需要做IAP订阅支付,开始觉得和微信的支付流程差不多,做起来还是有点麻烦,主要是网上的文章很少,不能拿来主义。自己做完总结一下,希望对小伙伴们有帮助我就很欣慰了。代码写的不好 不要喷我。。。 首先讲一下我的业务逻辑,也就是php服务端需要做什么事情。 先上图: 下面我详细的讲一下每...

山水的博客 1万+

Python函数参数传递

函数传参,实参与形参的传递(一起努力,咱们顶峰相见)

精益求精,永无止境,永远在路上! 1万+

IEEE802.11bf: WLAN Sensing Standard

下表为IEEE802.11bf 定义的使用情境 (Use Cases)

qinsd19的博客 1056

深度好文! Python函数参数传递:到底是值传递还是传用传递?

版权申明:原创文章,未经博主同意,不得转载! 在进入正题之前,我们先来了解以下Python中可更改(mutable)与不可更改(immutable)对象以及值传递和引用传递的含义。 可更改对象与不可更改对象 在 python 中一切皆为对象,string, tuple, 和 number 是不可更改对象,而 list,dict 等则是可更改对象。 不可更改对象 变量赋值 a=‘Python’ 后...

iMotherBoard的博客 4721

TortoiseSVN的安装与使用

TortoiseSVN的安装与应用1、安装1.1、下载TortoiseSVN    点击下载TortoiseSvn1.2、下载汉化包。上面的页面中,找到Chinese, simplified汉化包,点击32位或者64位的Setup,下载汉化包。1.3、安装TortoiseSVN。在选择安装路径页面时要记得勾选“command line client tools”,默认不是勾选的。这里不勾选的话在I...

qq_28566071的博客 4万+

Spine换装系统深度优化:从局部换肤到动态合批的进阶之路

本文深入探讨了Spine换装系统的性能优化策略,从局部换肤到动态合批的进阶技术。通过分析传统方案的性能瓶颈,提出动态合批、GPU Instancing等高级优化方法,显著降低Draw Call和内存占用,提升游戏性能。适用于MMO和大型游戏开发,帮助技术美术和工程师突破大规模换装场景的性能限制。

vulkan6gpu的博客 554

python之函数参数传递的几种方式总结

1. 几种函数参数传递方式 '*': 取元组或列表整体作为参数传递(看后面代码例子更容易理解) '**': 取字典整体作为参数传递(看后面代码例子更容易理解) '*args': 接受元组作为函数参数 '**kwargs': 接受字典作为函数参数 2. 函数示例来理解用法 参数传递 " * " 代码示例 >>> def fun(a,b,c): ... prin...

依串烤肉 2092

AUTOSAR 3万字面试题全面解析(持续更新)

ECU抽象层(EAL)是AUTOSAR架构中的一部分,它位于微控制器抽象层(MCAL)之下,但通常与MCAL一起被提及。EAL的目标是提供一个统一的接口来访问和管理ECU(Electronic Control Unit,电子控制单元)的硬件资源,包括处理器、存储器和外围设备。通过这种抽象,EAL使得上层软件能够以一种标准化的方式与ECU硬件交互,而不需要关心具体的硬件实现细节。EAL解决了硬件异构性带来的问题,即不同ECU可能采用不同类型的处理器和硬件配置。

大模型大数据攻城狮的专栏 5607

python函数的传递方式有哪些_详细介绍Python函数参数的传递的方法

详细介绍Python函数参数的传递的方法Python函数参数是计算机常用的计算机语言,但是在其运行的过程中会有些困难,例如, Python函数参数与命令行参数ython中函数参数的传递是通过赋值来传递的。下面就是关于其的介绍,希望你会有所收获。函数参数的使用又有俩个方面值得注意:>>>def printpa(**a):... print type(a)... print a...>>>...

weixin_39637203的博客 240

通过WorkVisual连接KUKA机器人的具体方法

通过WorkVisual连接KUKA机器人的具体方法

Robot_PLC_HMI_Automation 6843

适航规章、标准,书籍资料下载汇总(增加DO-160G中英文版)

很多读者之前问我有没有DO-160G的资源,现在终于找到啦!如果大家有其他想要的资源,可以在留言区告诉我,有空我会帮大家找找看~文末有下载链接:更新日志:2024-9-28:初版。2024-10-21:增加DO-330英文版PDF下载。2024-10-30:增加DO-160G中文版(非机翻)和英文版PDF下载。以下是一些收集到的适航相关的资料,分享给大家。(如果没有你想要的资料,请留言,等找到会及时更新!

qq_41854911的博客 2757

Python函数参数的值传递机制

目录 1 Python函数参数的值传递机制 2 Python函数参数的引用传递 3 两个结论 Python中,函数参数由实参传递给形参的过程,是由参数传递机制来控制的。通过学习《Python函数值传递和引用传递》一节我们知道,根据实际参数的类型不同,函数参数的传递方式分为值传递和引用传递(又称为地址传递),本节将对这两种传递机制做深度剖析。 1 Python函数参数的值传递机制 所谓值传递,实际上就是将实际参数值的副本(复制品)传入函数,而参数本身不会受到任何影响。 值传递的方式,类似于《西游

惊鸿一博 1086

韩版传奇 2 源码分析与 Unity 重制(一)服务端 TCP 状态管理

该专题将会分析 LOMCN 基于韩版传奇 2,使用 .NET 重写的传奇源码(服务端 + 客户端),分析数据交互、状态管理和客户端渲染等技术,此外笔者还会分享将客户端部分移植到 Unity 和服务端用现代编程语言重写的全过程。本文重点介绍了服务端的启动链路、网络初始化和连接处理这三个过程,并简要分析的游戏循环的实现与数据包处理,在下一篇文章中,我们会从客户端角度分析从游戏启动、登录、游戏开始和基础游戏交互的全流程。

东方猫的博客 2497

python函数参数传递方式_Python函数参数传递机制

Python函数参数传递机制【转载】Python函数参数的值传递机制所谓值传递,实际上就是将实际参数值的副本(复制品)传入函数,而参数本身不会受到任何影响。值传递的方式,类似于《西游记》里的孙悟空,它复制一个假孙悟空,假孙悟空具有的能力和真孙悟空相同,可除妖或被砍头。但不管这个假孙悟空遇到什么事,真孙悟空都不会受到任何影响。与此类似,传入函数的是实际参数值的复制品,不管在函数中对这个复制品如何操作...

weixin_39897749的博客 88

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Python 函数参数传递机制(详解)

值得指出的是,主程序中的 dw 是一个引用变量(也就是一个指针),它保存了字典对象的地址值,当把 dw 的值赋给 swap() 函数的 dw 参数后,就是让 swap() 函数的 dw 参数也保存这个地址值,即也会引用到同一个字典对象。将主程序中的 a、b 变量作为参数值传入 swap() 函数,实际上是在 swap() 函数栈区中重新产生了两个变量 a、b,并将主程序栈区中 a、b 变量的值分别赋值给 swap() 函数栈区中的 a、b 参数(就是对 swap() 函数的 a、b 两个变量进行初始化)。

梁辰兴的博客 2314

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C与Python函数参数传递总结

要理解值传递、指针传递和引用传递的区别,主要要理解函数的实参和形参,函数的作用域(自动变量、栈),内存的布局以及指针和引用的特点。 值传递:只给函数提供输入值,需要复制开销,大对象很少使用值传递。 指针传递:可以改变指针指向内容的值,但是不能改变指针本身,无需复制开销。如果需要改变指针本身,可以使用二重指针或者指针引用。 引用传递:除了提供输入值外,还返回操作结果,无需复制开销。 对于引用

黄凯强的博客 2123

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Python中函数参数传递的本质——引用传递

一文带你了解Python中函数参数传递的本质!

weixin_37780776的博客 1561

探究Python函数参数传递的奥秘

本文深入探究了Python函数参数传递的奥秘,并提供了详细的代码示例。我们了解了Python函数参数传递的基本概念、具体实践和高级技巧,包括不可变类型的参数传递、可变类型的参数传递、默认参数的传递、使用*args和**kwargs传递任意数量的参数、使用装饰器实现参数检查以及参数类型注解和类型检查。通过掌握这些知识,我们可以写出高效、可维护的代码,并更好地理解Python函数参数传递的机制。

博客 527

python函数参数传递特点_Python的函数参数传递

首先还是应该科普下函数参数传递机制,传值和传引用是什么意思?函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题。基本的参数传递机制有两种:值传递和引用传递。值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数...

weixin_39677419的博客 264

Python: 函数参数传递机制

Python: 函数参数传递机制 Python函数参数由实参传递给形参的过程,是由参数传递机制来控制的,根据实际参数类型不同,函数参数传递方式分为值传递和引用传递(又称为地址传递)。 值传递机制 所谓值传递,实际上就是将实际参数值的副本(复制品)传入函数,而参数本身不会受到任何影响。 值传递的实质:当系统开始执行函数时,系统对形参执行初始化,就是把实参变量的值赋给函数的形参变量,在函数中操作的并不是实际的实参变量。 引用传递 如果实际参数的数据类型是可变对象(列表、字典),则函数参数的传递方式将

《好好先生》专栏 1419

python中函数参数传递的三种方式_python中函数参数传递的几种方法

转自 http://www.douban.com/note/13413855/Python中函数参数的传递是通过“赋值”来传递的。但这条规则只回答了函数参数传递的“战略问题”,并没有回答“战术问题”,也就说没有回答怎么赋值的问题。函数参数的使用可以分为两个方面,一是函数参数如何定义,二是函数在调用时的参数如何解析的。而后者又是由前者决定的。函数参数的定义有四种形式:1. F(arg1,arg2,...

weixin_39708854的博客 5576

python函数参数传递类_Python函数参数传递

Python中函数参数的传递是采用传值方式,但是和C/C++有所不同C/C++方式void fun(int a){a = 10;}void main(){int c =3;fun(c);}上面示例,c最终的值是3.因为c是将3这个值传递给了fun,其本身的值没有变。fun函数在使用3这个值时,又申请了一个临时的存储空间,这个存储空间在调用函数结束后被销毁。void fun(int *a){*a =...

weixin_39758712的博客 323

python 函数参数传递机制_Python函数参数传递机制(超级详细)

Python中,函数参数由实参传递给形参的过程,是由参数传递机制来控制的。通过学习《Python函数值传递和引用传递》一节我们知道,根据实际参数的类型不同,函数参数的传递方式分为值传递和引用传递(又称为地址传递),本节将对这两种传递机制做深度剖析。Python函数参数的值传递机制所谓值传递,实际上就是将实际参数值的副本(复制品)传入函数,而参数本身不会受到任何影响。值传递的方式,类似于《西游记》里...

weixin_30240263的博客 250

Python函数参数传递机制

Python 中,函数参数由实参传递给形参的过程,是由参数传递机制来控制的。通过学习《Python函数值传递和引用传递》一节我们知道,根据实际参数的类型不同,函数参数的传递方式分为值传递和引用传递(又称为地址传递),本节将对这两种传递机制做深度剖析。 Python函数参数的值传递机制 所谓值传递,实际上就是将实际参数值的副本(复制品)传入函数,而参数本身不会受到任何影响。 值传递的方式,类似...

yinlu521wang的博客 263

Python 函数参数传递

我们都知道,在C++中,函数参数的传递包括,值传递引用传递地址传递,这三种参数传递方式,并且可以在定义函数时显式的指明传递方式,而Python并非如此。Python 的函数参数传递是基于对象引用的。这意味着传递的不是值本身,也不是变量的地址,而是对象的引用。

Johnor的博客 526

python函数参数引用传递

首先还是应该科普下函数参数传递机制,传值和传引用是什么意思?    函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题。基本的参数传递机制有两种:值传递和引用传递。   值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副

audio_mqiu的专栏 1037
上一篇: 字符串反转
下一篇: 强制 code review:reviewboard+svn 的方案
JasonChou0913
博客等级 码龄12年 1粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值