版本:一般用python2.7.6

python3.4.3会标注

1、不可变对象(整数、字符串)通过对象引用进行传递,在函数内部不可改变。

 >>> def f(a):
... a=100
...
>>> b=88
>>> f(b)
>>> b
88

2、可变对象(列表、字典)也是通过对象引用进行传递,在函数内部可以改变。(原对象本地改变,但是重新赋值不会改变)

 >>> def F(a):
... a=[1,2,3]
...
>>> b=[]
>>> F(b)
>>> b
[]
 >>> def F(a):
... a.append(3)
...
>>> F(b)
>>> b
[3]

3、参数匹配

默认参数和关键字参数

 >>> def F(a):
... a.append(3)
...
>>> F(b)
>>> b
[3]
>>>
KeyboardInterrupt
>>> def F(a,b,c):
... print(a,b,c)
...
>>> F(1,2,3)
(1, 2, 3)
>>> F(c=3,a=1,b=2)
(1, 2, 3)
>>> def F(a,b=2,c=3):
... print(a,b,c)
...
>>> F(1,4)
(1, 4, 3)

4、任意参数匹配

*和**支持任意数目的参数

*把参数收集到一个元组。

 >>> def F(*arges):
... print (arges)
...
>>> F(1,'a',['',3],{'a':1,'b':2})
(1, 'a', ['', 3], {'a': 1, 'b': 2})

**只对关键字参数有效,将关键字参数传递给一个字典,之后可以用字典进行处理。

 >>> def F(**arges):
... print(arges)
...
>>> F()
{}
>>> F(a:1)
File "<stdin>", line 1
F(a:1)
^
SyntaxError: invalid syntax
>>> F(a=1,b=2)
{'a': 1, 'b': 2}
>>> F(1=a,2=b)
File "<stdin>", line 1
SyntaxError: keyword can't be an expression
>>> F(''=a,''=b)
File "<stdin>", line 1
SyntaxError: keyword can't be an expression
>>> F(1='a',2='b')
File "<stdin>", line 1
SyntaxError: keyword can't be an expression
>>> F('a'=1,'b'=2)
File "<stdin>", line 1
SyntaxError: keyword can't be an expression
>>> F(a=1,b=2)
{'a': 1, 'b': 2}
>>> F(a=[1],b=2)
{'a': [1], 'b': 2}
>>>

可以传递多个参数的形式

 >>> def F(*a,**b):
... print (a,b)
...
>>> F(1,'a',[3,3],x=1,y='e')
((1, 'a', [3, 3]), {'y': 'e', 'x': 1})
 >>> def F(a,*b,**c):
... print(a,b,c)
...
>>> F('s','s','s',s='s')
('s', ('s', 's'), {'s': 's'})
>>>

上面第二个和第三个‘s'被收集到一个元组

只能用关键字的参数(python3以上)

 >>> def F(a,*b,c):
... print (a,b,c)
...
>>> F(1,2,'a',c=3)
1 (2, 'a') 3
 >>> def F(a,*,b,c):
... print (a,b,c)
...
>>> F(1,b='a',c=3)
1 a 3

第一个例子*b后的关键字c必须使用c=3等式方式赋值

第二个例子*后的b和c必须使用等式赋值的方式

python函数的参数匹配的更多相关文章

  1. Python函数可变参数*args及**kwargs详解

    初学Python的同学们看到代码中类似func(*args, **kwargs)这样的函数参数定义时,经常感到一头雾水. 下面通过一个简单的例子来详细解释下Python函数可变参数*args及**kw ...

  2. 【转】Python函数默认参数陷阱

    [转]Python函数默认参数陷阱 阅读目录 可变对象与不可变对象 函数默认参数陷阱 默认参数原理 避免 修饰器方法 扩展 参考 请看如下一段程序: def extend_list(v, li=[]) ...

  3. 详解python函数的参数

    详解python函数的参数 一.参数的定义 1.函数的参数在哪里定义 在python中定义函数的时候,函数名后面的括号里就是用来定义参数的,如果有多个参数的话,那么参数之间直接用逗号, 隔开 案列: ...

  4. 可变数据类型不能作为python函数的参数

    可变数据类型:列表.字典 不可变数据类型:整型.浮点型.字符串.元组 为什么可变数据类型不能作为python函数的参数?请看以下例子: def foo(a=[]): a.append(1) retur ...

  5. python 函数、参数及参数解构

    函数 数学定义 y=f(x), y是x函数,x是自变量.y=f(x0,x1...xn) Python函数 由若干语句组成的语句块,函数名称,参数列表构成,它是组织代码的最小单位 完成一定的功能 函数作 ...

  6. python 函数传递参数的多种方法

    python中函数根据是否有返回值可以分为四种:无参数无返回值,无参数有返回值,有参数无返回值,有参数有返回值. Python中函数传递参数的形式主要有以下五种,分别为位置传递,关键字传递,默认值传递 ...

  7. python函数动态参数详解

    Python的动态参数: 1,参数前一个"*":在函数中会把传的参数转成一个元组. def func (*args): print(args) func(123,1,2,'a') ...

  8. Python 函数的参数知识汇总

    函数搞不熟,后边就晕头转向了,在此重新归纳一下廖大神的函数教程,加深记忆 一.函数的参数分为: 位置参数 def power(x): # x 就是power(x)的一个位置参数,我们调用power(x ...

  9. Python学习笔记(四)Python函数的参数

    Python的函数除了正常使用的必选参数外,还可以使用默认参数.可变参数和关键字参数. 默认参数 基本使用 默认参数就是可以给特定的参数设置一个默认值,调用函数时,有默认值得参数可以不进行赋值,如: ...

随机推荐

  1. git 修改远程仓库地址

    以前的老项目需要修改git路径,为了保留之前的上传记录和分支等可以通过以下方法解决这个问题 sourceTree项目远程仓库,直接修改origin路径,然后提交一个commit即可将项目上传到新的gi ...

  2. PyCharm搭建Spark开发环境 + 第一个pyspark程序

    一, PyCharm搭建Spark开发环境 Windows7, Java 1.8.0_74, Scala 2.12.6, Spark 2.2.1, Hadoop 2.7.6 通常情况下,Spark开发 ...

  3. erlang 最大公约数

    一般面试会遇到问一些算法,什么排序,树,图等等,冷不丁还会问几个蛋疼的问题,我估计生产情况十有八九都用不上,只是题目罢了. 题目:求两个大数的最大公约数. 什么是最大公约数呢? 百度百科的答案这样的: ...

  4. vi相关命令

    vi相关命令在行首加#        :% s/^/#        删除#        :% s/#//在行末加#        :% s/$/#        删除        :% s/#$ ...

  5. 关于使用eclipse开发最小运行组件包

    有的时候向用eclipse组件,但是其中好多东西是相互关联的,如果在eclipse上做二次开发固然可以,但是有的时候想要的只不过是一个可以运行的架包而已,所以不必要那么多东西. 下面是我使用eclip ...

  6. Expression Tree上手指南 (一)

    大家可能都知道Expression Tree是.NET 3.5引入的新增功能.不少朋友们已经听说过这一特性,但还没来得及了解.看看博客园里的老赵等诸多牛人,将Expression Tree玩得眼花缭乱 ...

  7. (转)Java并发编程:阻塞队列

    原文地址: http://www.cnblogs.com/dolphin0520/p/3932906.html 一.几种主要的阻塞队列 自从Java 1.5之后,在java.util.concurre ...

  8. echart 图表自定义样式

    initChart: function (id) { this.charts = echarts.init(document.getElementById(id)) this.charts.setOp ...

  9. <%%>与<scriptrunat=server>,<%=%>与<%#%>的区别(转)

    这些东西都是asp.net前台页面与后台代码交互过程中经常使用的,它们之间有的非常相似,又有一些不同.对比学习下,看看他们之间的联系与区别. 首先看<%%>与<scriptrunat ...

  10. 九度OJ 1354:和为S的连续正数序列 (整除)

    时间限制:2 秒 内存限制:32 兆 特殊判题:否 提交:2028 解决:630 题目描述: 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不 ...