设为首页 收藏本站

运维网

查看: 351|回复: 0

[经验分享] python函数传递参数

[复制链接]

尚未签到

发表于 2018-8-10 13:47:18 | 显示全部楼层 |阅读模式
  python 函数传递参数的多种方法
  python中函数根据是否有返回值可以分为四种:无参数无返回值,无参数有返回值,有参数无返回值,有参数有返回值。
  Python中函数传递参数的形式主要有以下五种,分别为位置传递,关键字传递,默认值传递,不定参数传递(包裹传递)和解包裹传递。
  1.位置传递实例:
  def fun(a,b,c)
  return a+b+c
  print(f(1,2,3))
  2.关键字传递
  关键字(keyword)传递是根据每个参数的名字传递参数。关键字并不用遵守位置的对应关系。
  def fun(a,b,c)
  return a+b+c
  print(f(1,c=3,b=2))
  3.参数默认值
  在定义函数的时候,使用形如c=10的方式,可以给参数赋予默认值(default)。如果该参数最终没有被传递值,将使用该默认值。
  def f(a,b,c=10):
  return a+b+c
  print(f(3,2))
  print(f(3,2,1))
  在第一次调用函数f时, 我们并没有足够的值,c没有被赋值,c将使用默认值10.第二次调用函数的时候,c被赋值为1,不再使用默认值。
  4.包裹传递
  在定义函数时,我们有时候并不知道调用的时候会传递多少个参数。这时候,包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会非常有用。
  下面是包裹位置传递的例子:
  def func(*name):
  print type(name)
  print name
  func(1,4,6)
  func(5,6,7,1,2,3)
  两次调用,尽管参数个数不同,都基于同一个func定义。在func的参数表中,所有的参数被name收集,根据位置合并成一个元组(tuple),这就是包裹位置传递。
  为了提醒Python参数,name是包裹位置传递所用的元组名,在定义func时,在name前加*号。
  下面是包裹关键字传递的例子:
  def func(**dict):
  print type(dict)
  print dict
  func((1,9))
  func("a":2,"b":1,"c":11)
  与上面一个例子类似,dict是一个字典,收集所有的关键字,传递给函数func。为了提醒Python,参数dict是包裹关键字传递所用的字典,在dict前加**。
  包裹传递的关键在于定义函数时,在相应元组或字典前加*或**。
  5.解包裹
  *和**,也可以在调用的时候使用,即解包裹(unpacking), 下面为例:
  def func(a,b,c):
  print a,b,c
  args = (1,3,4)
  func(*args)
  dict = {'a':1,'b':2,'c':3}
  func(**dict)
  在这个例子中,所谓的解包裹,就是在传递tuple时,让tuple的每一个元素对应一个位置参数。在调用func时使用,是为了提醒Python:我想要把args拆成分散的三个元素,分别传递给a,b,c。(设想一下在调用func时,args前面没有会是什么后果?)
  相应的,也存在对词典的解包裹,使用相同的func定义,然后:在传递词典dict时,让词典的每个键值对作为一个关键字传递给func。
  6.综合实例:
  下面是可变长参数的一些用法:
  复制代码
  复制代码
  1
  2 def foo(arg1,arg2="OK",*tupleArg,*dictArg):
  3     print "arg1=",arg1
  4     print "arg2=",arg2
  5     for i,element in enumerate(tupleArg):
  6         print "tupleArg %d-->%s" % (i,str(element))
  7     for  key in dictArg:
  8         print "dictArg %s-->%s" %(key,dictArg[key])
  9
  10 myList=["my1","my2"]
  11 myDict={"name":"Tom","age":22}
  12 foo("formal_args",arg2="argSecond",a=1)
  13 print ""40
  14 foo(123,myList,myDict)
  15 print ""40
  16 foo(123,rt=123,myList,**myDict)
  复制代码
  复制代码
  输出为:
  python 动画处理网站http://www.pythontutor.com

运维网声明 1、欢迎大家加入本站运维交流群:群①:263444886群②:197202523群③:485755530群④:201730672群⑤:202807635运维网交流群⑥:281548029
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须注明原文的出处
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、运维网 - 服务您的运维操作管理专家!
6、联系人Email:admin@yunvn.com 网址:www.iyunv.com

点击关注更多内容
您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则  允许回帖邮件提醒楼主

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服 E-mail:kefu@yunvn.com

本站由青云提供云计算服务

运维网--中国最专业的运维工程师交流社区

京ICP备14039699号-1 Copyright © 2012-2018

使用手机软件扫描微信二维码

关注我们可获取更多热点资讯

Good good study day day up !


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


独家合作伙伴: 青云cloud

快速回复 返回顶部 返回列表