python函数的参数匹配
版本:一般用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函数的参数匹配的更多相关文章
- Python函数可变参数*args及**kwargs详解
初学Python的同学们看到代码中类似func(*args, **kwargs)这样的函数参数定义时,经常感到一头雾水. 下面通过一个简单的例子来详细解释下Python函数可变参数*args及**kw ...
- 【转】Python函数默认参数陷阱
[转]Python函数默认参数陷阱 阅读目录 可变对象与不可变对象 函数默认参数陷阱 默认参数原理 避免 修饰器方法 扩展 参考 请看如下一段程序: def extend_list(v, li=[]) ...
- 详解python函数的参数
详解python函数的参数 一.参数的定义 1.函数的参数在哪里定义 在python中定义函数的时候,函数名后面的括号里就是用来定义参数的,如果有多个参数的话,那么参数之间直接用逗号, 隔开 案列: ...
- 可变数据类型不能作为python函数的参数
可变数据类型:列表.字典 不可变数据类型:整型.浮点型.字符串.元组 为什么可变数据类型不能作为python函数的参数?请看以下例子: def foo(a=[]): a.append(1) retur ...
- python 函数、参数及参数解构
函数 数学定义 y=f(x), y是x函数,x是自变量.y=f(x0,x1...xn) Python函数 由若干语句组成的语句块,函数名称,参数列表构成,它是组织代码的最小单位 完成一定的功能 函数作 ...
- python 函数传递参数的多种方法
python中函数根据是否有返回值可以分为四种:无参数无返回值,无参数有返回值,有参数无返回值,有参数有返回值. Python中函数传递参数的形式主要有以下五种,分别为位置传递,关键字传递,默认值传递 ...
- python函数动态参数详解
Python的动态参数: 1,参数前一个"*":在函数中会把传的参数转成一个元组. def func (*args): print(args) func(123,1,2,'a') ...
- Python 函数的参数知识汇总
函数搞不熟,后边就晕头转向了,在此重新归纳一下廖大神的函数教程,加深记忆 一.函数的参数分为: 位置参数 def power(x): # x 就是power(x)的一个位置参数,我们调用power(x ...
- Python学习笔记(四)Python函数的参数
Python的函数除了正常使用的必选参数外,还可以使用默认参数.可变参数和关键字参数. 默认参数 基本使用 默认参数就是可以给特定的参数设置一个默认值,调用函数时,有默认值得参数可以不进行赋值,如: ...
随机推荐
- centos7设置ip
centos7不能再通过setup命令来设置ip了,但可以通过修改网卡配置文件来设置ip 在/etc/sysconfig/network-scripts目录下找到网卡配置文件,修改之前内容如下 TYP ...
- 【Mac系统】之fiddler下载和安装
使用教程参考:http://www.cnblogs.com/TankXiao/archive/2012/02/06/2337728.html#request 一.首先,在Mac下安装fiddler时, ...
- 刨根问底 HTTP 和 WebSocket 协议(上)
HTTP vs WebSocket 那天和boss聊天,不经意间提到了Meteor,然后聊到了WebSocket,然后就有了以下对话,不得不说,看问题的方式不同,看到的东西也会大不相同. A:Mete ...
- Win7系统CMD命令提示符输入中文变乱码怎么办
Win7系统下经常使用CMD命令提示符进行很多操作,发现Win7旗舰版系统在CMD命令提示符不能输入文字,输入的中文字都变成乱码,这是怎么回事呢?本文将提供Win7系统CMD命令提示符输入中文变乱码的 ...
- Lumen开发:结合Redis实现消息队列(1)
1.简介 Lumen队列服务为各种不同的后台队列提供了统一的API.队列允许你推迟耗时任务(例如发送邮件)的执行,从而大幅提高web请求速度. 1.1 配置 .env文件的QUEUE_DRIVER选项 ...
- USB设备驱动程序(二)
首先我们来看USB设备描述符的结构: 在USB总线识别设备阶段就将USB描述符发送给了USB总线驱动程序,设备的数据传输对象是端点,端点0是特殊端点,在USB总线驱动程序识别阶段, 会分配一个地址给U ...
- css3 transition效果
<meta charset="UTF-8"> <style> .btn { display: inline-block; font-size: 12px; ...
- 换教室(期望+DP)
换教室(期望+DP) \(dp(i,j,1/0)\)表示第\(i\)节课,申请了\(j\)次调换,这节课\(1/0\)调换. 换教室 转移的时候考虑: 上次没申请 这次也没申请 加上\(dis(fr[ ...
- pg 和sql server 分别如何新建二进制数据库字段以及插入二进制数据的sql语句
PG create table demo ( id int, name bytea ); Insert into demo (id,name)values(256,pg_read_binary_fil ...
- spring 3.2 后 annotation-driven 注册新的类
DefaultAnnotationHandlerMapping 和 AnnotationMethodHandlerAdapter 的使用已经过时! DefaultAnnotationHandlerMa ...