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

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的函数对参数解析分析相关推荐

  1. python 参数解析_python的函数对参数解析分析

    以下转自其它博客.觉得总结得太好了,所以拿来自己参考一下. python中函数参数的传递是通过赋值来传递的. 函数参数的使用又有俩个方面值得注意: 1.函数参数是如何定义的 2.在调用函数的过程中参数 ...

  2. Python:wordcloud.wordcloud()函数的参数解析及其说明

    Python:wordcloud.wordcloud()函数的参数解析及其说明 目录 wordcloud.wordcloud()函数的参数解析及其说明 wordcloud.wordcloud()函数的 ...

  3. windows 下 Python的命令行参数解析 argparse模块 的使用

        argparse模块是Python内置的参数解析模块,相较于传统的 sys.argv 来说,其功能更加的强大,操作也更灵活. ArgumentParser类创建时的参数如下: prog - 程 ...

  4. Python的命令行参数解析

    文章作者:Tyan 博客:noahsnail.com  |  CSDN  |  简书 命令行参数解析在编程语言中基本都会碰到,Python中内置了一个用于命令项选项与参数解析的模块argparse.下 ...

  5. python 参数封装_扩展Python模块系列(三)----参数解析与结果封装

    在上一节中,通过一个简单的例子介绍了C语言扩展Python内建模块的整体流程,从本节开始讲开始深入讨论一些细节问题,在细节讨论中从始至终都会涉及[引用计数]的问题.首先讨论C语言封装的Python函数 ...

  6. python参数传递方法_深入理解python中函数传递参数是值传递还是引用传递

    python 的 深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是&q ...

  7. Python中函数的参数传递方式

    Python中函数的参数传递方式 .普通的参数传递 >>> def add(a,b):return a+b >>> print add(1,2) 3 >> ...

  8. Python之函数的参数

    Python中函数的参数有五种:位置参数(必选参数).默认参数.可变参数.关键字参数.命名关键字参数. #位置参数 //定义位置参数函数 def sayHello(name):print('hello ...

  9. python数据参数_零基础学习python数据分析——函数的参数

    原标题:零基础学习python数据分析--函数的参数 上一节课中我们讲了python的函数定义,Python的函数定义非常简单,但灵活度却非常大.除了正常定义的必选参数外,还可以使用默认参数.可变参数 ...

最新文章

  1. c语言gga字符串校验和代码,NMEA-0183协议解析(示例代码)
  2. 关于Java的23种设计模式的有趣见解
  3. java dubbo 方案,Missing artifact com.alibaba:dubbo:jar:2.8.4 dubbo解决方案
  4. Hessian之简单使用
  5. leetcode167. 两数之和 II - 输入有序数组
  6. SQL数据表层面操作(DDL)
  7. php中的解析范围符,PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】...
  8. JS无刷新修改URL类似博客园翻页效果
  9. ocienvcreate php 失败_win7 homebasic下,.net2008 连接oracle,提示错误OCIEnvCreate
  10. C#中如何生成矢量图
  11. javaweb项目tomcat检查不到当前模型的解决方法
  12. Java基础(冒泡排序)
  13. 证件管理系统开发1 :明确需求
  14. 批量修改WORD文档密码
  15. 学术写作 系列1 HOW TO WRITE AN INTRODUCTION
  16. python段落注释的语法格式是_python段落注释
  17. 流媒体技术原理与应用
  18. iOS 苹果2.1大礼包解决方法
  19. 无缘无故,Oralce使用normal模式登录用户失败
  20. java全栈系列之JavaSE-面向对象(封装详解)034

热门文章

  1. python官方网站是-Python基础
  2. 在Ubuntu下输入ifconfig命令返回: ifconfig:找不到命令
  3. Scikit-learn环境的搭建
  4. Luhn算法验证信用卡的合法性
  5. Linux基础命令-mkdir
  6. python中的控制流
  7. Cesium 中两种添加 model 方法的区别
  8. 4-20模块 序列化模块 hashlib模块
  9. Cocos2d 之FlyBird开发---GameData类
  10. android ui篇