版本:一般用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. 【Java并发编程】并发编程大合集

    转载自:http://blog.csdn.net/ns_code/article/details/17539599 为了方便各位网友学习以及方便自己复习之用,将Java并发编程系列内容系列内容按照由浅 ...

  2. iOS 多网络请求同步并发

    iOS中经常会用到多线程,在多线程中有一个线程组的概念(group),创建多个线程组任务,多组任务都完成之后,就会进入dispatch_group_notify队列中. 同时多线程中还有一个信号量的概 ...

  3. [转]const指针与指向const的指针

    经常忘记,保存一下.. #include <iostream> using namespace std; int main(int argc, char *argv[]) { ; int ...

  4. Android下的数据存储与访问、权限

    弹出吐司 在onCreate中可以先获取控件对象 /data/data/程序的包名/          在这个目录下面进行文件的读写可能因为包名的改变而变得不可靠. this可以是Activity,也 ...

  5. 通过pyenv进行多版本python管理

    1.安装pyenv brew install pyenv 2.配置.zshrc文件 export PYENV_ROOT=/usr/local/var/pyenv if which pyenv > ...

  6. TCP可靠传输详解

    TCP提供了可靠的传输服务,这是通过下列方式提供的: 分块发送:应用数据被分割成TCP认为最适合发送的数据块.由TCP传递给IP的信息单位称为报文段或段(segment) 定时确认重传:当TCP发出一 ...

  7. java学习笔记之String.Split方法

    hello 大家好,好久不见,今天 我们要讨论的是java的split方法,或许你很早就知道了,但你真的知道吗? 我们来看看吧. 首先我们来看看我们最常用的split()方法也就是单个参数的方法 pu ...

  8. java程序优化

    程序代码优化要点: 字符串优化:分析String源码,了解String常用方法,使用StringBuffer.StringBuilder. List.Map.Set优化:分析常用ArrayList.L ...

  9. iptables的用例

    iptables书写思路顺序 1.协议 icmp 2.哪个功能和目标:过滤,拒绝 3.数据包流向:外到内 4.哪个链适合:越早越好,INPUT 5.源地址和目标地址 练习1.禁止某些主机或网络访问本机 ...

  10. spark的若干问题

    问题1:SPARK与HADOOP之间的关系? spark是一种高效处理hadoop分布式数据的处理引擎.借助hadoop的yarn框架,spark就可以运行在hadoop集群中.同时spark也可以处 ...