Python中函数的参数-arguments
归纳起来,Python中函数的定义形式和调用形式主要有如下几种形式:
# 函数的定义形式
def func(name) # 匹配positional参数或者keyword参数
def func(name=value) # 如果不传,有默认参数
def func(*name) # 将额外的positional参数转换成一个tuple,然后赋给name
def func(**name) # 将额外的keyword参数转换成一个dictionary,然后赋给name
def func(*other, name) # Python 3.X中定义keyword-only参数的形式,Python 2.X中不支持,此时,name一定要以keyword的形式传递
def func(*, name) # Python 3.X中定义keyword-only参数的形式, Python 2.X中不支持,此时, name一定要以keyword的形式传递 # 函数的调用
func(name) # 以positional参数调用
func(name=value) # 以keyword参数调用
func(*iterable) # 将iterable对象转换成一连串单个positional参数进行调用
func(**dictionary) # 将dictionary转换成keywrod参数进行调用
这里需要注意3点:
1 在Python 2.X中(在Python 3.X中,这种形式已经不允许了),还有一种定义函数的方式,就是将函数的参数定义成一个tuple,那么,当调用函数的时候,传递一个结构一样的tuple参数,这个tuple参数就会被unpack:
# 定义
def func((a, (b, c)) # 调用
func((1, (2, 3)) # a=1, b=2, c=3
func((1, [2, 3])) # a=1, b=2, c=3,这样调用也是可以的
func((1, 'mn')) # a=1, b='m', c='n', 这样也可以,也就是说调用的时候只要是序列都可以 # 但是定义的时候只能是tuple,不能出现其他序列,比如数组,下面的情形是不对的
def func((a, [b, c]))
2 对于调用形式func(*name)和func(**name),也可以使用apply函数达到同样的效果,但是apply函数只能在Python 2.X中使用,在Python 3.X中被移除了,使用形式为:
def func(*a, **b) a=(1, 2)
b={'c':3, 'd':4} func(*a, **b) # Python 2.X和Python 3.X均支持 apply(func, a, b) # 仅Python 2.X支持,效果一样
3 对于默认参数,尤其要注意可变对象,每一次以默认形式象调用函数,这个默认的参数会被重用,而不会重置:
def func(a=[]):
a += [1]
print(a) >>>func()
[1] >>>func() # 此时a的值是[1]
[1, 1] >>>func() # 此时a的值是[1, 1]
[1, 1, 1]
函数定义时参数的顺序以及函数调用时参数的顺序
Python中,定义函数和调用函数时,参数的顺序有一定的规则,如果不符合规则,Python会报错:
1 在定义函数时,参数的顺序为:positional参数(name),默认参数(name=value),*name形式(或者只有一个*,但是只在Python 3.X中支持),name或者name=value形式(都只在Python 3.X中支持,叫keyword-only参数,后面name=value是赋默认值),**name形式;
2 在调用函数时,参数的顺序为:positional参数(name),keyword参数(name=value)或者*name形式,**name形式
总之,**name无论在定义函数时,还是在调用函数时,都只应出现在最后。
函数参数的匹配步骤
Python内部,对于函数参数的匹配大致分为5步:
1 首先匹配positional参数(name)
2 匹配keywrod参数(name=value)
3 将额外的非keyword参数匹配给*name形式
4 将额外的keyword参数匹配给**name形式
5 如果有默认值,给未传递的参数赋默认值
经过上述步骤之后,Python还需要确保,每一个参数,只匹配了一个值,否则,就会报错。
Python中函数的参数-arguments的更多相关文章
- 深入理解python中函数传递参数是值传递还是引用传递
深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是"传对象引用 ...
- Python中函数传递参数有四种形式
Python中函数传递参数有四种形式 fun1(a,b,c) fun2(a=1,b=2,c=3) fun3(*args) fun4(**kargs) 四种中最常见是前两种,基本上一般点的教程都会涉及, ...
- 讲讲python中函数的参数
python中函数的参数 形参:定义函数时代表函数的形式参数 实参:调用函数时传入的实际参数 列如: def f(x,y): # x,y形参 print(x, y) f(1, 2) # 1, 2 实参 ...
- python 中函数的参数
一.python中的函数参数形式 python中函数一般有四种表现形式: 1.def function(arg1, arg2, arg3...) 这种是python中最常见的一中函数参数定义形式,函数 ...
- python中函数的参数解析
python中函数的各种参数梳理: 1.形参:函数定义时传入的参数 2.实参:函数调用时传入的参数 (有形参必传实参,形参里自身特点可不传的,可传可不传) 3.缺省参数:不传为默认值,传了会覆盖(下面 ...
- python中函数的参数
函数参数(一) 思考一个问题,如下: 现在需要定义一个函数,这个函数能够完成2个数的加法运算,并且把结果打印出来,该怎样设计?下面的代码可以吗?有什么缺陷吗? def add2num(): a = 1 ...
- python中函数的参数和返回值
目录 函数 目标 01. 函数参数和返回值的作用 1.1 无参数,无返回值 1.2 无参数,有返回值 1.3 有参数,无返回值 1.4 有参数,有返回值 02. 函数的返回值 进阶 示例 -- 温度和 ...
- Python中函数的参数带星号是什么意思?
参数带星号表示支持可变不定数量的参数,这种方法叫参数收集. 星号又可以带1个或2个,带1个表示按位置来收集参数,带2个星号表示按关键字来收集参数. 1.带一个星号的参数收集模式: 这种模式是在函数定义 ...
- python中函数的参数:必传参数(位置参数)、默认值参数、参数组传参、关键字传参
1.必传参数也叫做位置参数,因为必填,也必须对应位置 2.默认值参数如上图的word 3.参数组参数:传进去的是0个.或多个value的形式,,,和位置参数有点像,只传value值,但是没有限制个数 ...
随机推荐
- linux安装完jenkins无法访问的问题
jenkins是一个持续集成部署的工具,非常好用,当然,有些细节问题还是需要注意的.当我们兴高采烈的安装完jenkins的时候,然后发现并不能访问,真是气死了. 这个时候就要一步一步检测问题出在哪. ...
- webpack 优化代码 让代码加载速度更快
一,如何优化webpack构建 (1),缩小文件搜索范围, 优化Loader配置 module.exports = { module: { rules: [ { test:/\.js$/, use:[ ...
- 中国软件大会上大快搜索入选中国数字化转型TOP100服务商
大快搜索自荣获“2018中国大数据企业50强”殊荣,12月20日在由工信部指导,中国电子信息产业化发展研究院主办的2018中国软件大会上,大快搜索获评“2018中国大数据基础软件领域领军企业”称号,入 ...
- Hadoop mapreduce框架简介
传统hadoop MapReduce架构(老架构) 从上图中可以清楚的看出原 MapReduce 程序的流程及设计思路: 1.首先用户程序 (JobClient) 提交了一个 job,job ...
- linux使用logrotate工具管理日志轮替
对于Linux系统安全来说,日志文件是极其重要的工具.logrotate程序是一个日志文件管理工具.用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到"转储"作用.可以节 ...
- ssh_key登录服务器,免密码登录
最近使用ssh远程登录服务器每次都要输入密码实在是太麻烦了,我这个懒人就想到了查了一下怎么用ssh-key来实现我的梦想. 使用密钥来登录 原理如下: 客户端向服务器发出请求.服务器收到请求之后,先在 ...
- go学习笔记-标准库
标准库 名称 摘要 archive tar tar包实现了tar格式压缩文件的存取. zip zip包提供了zip档案文件的读写服务. bufio bufio 包实现了带缓存的I/O操作. built ...
- Java基础——语法基础
一.标识符 1.不能使用数字开头 2.不能使用关键字 (更多命名规范,参见基础加强随笔) 二.数据类型 主要分为四种: 整形: byte 1字节8位 范围 -128~127 short 2 ...
- services 系统服务的启动、停止、卸载
MySQL服务的启动.停止与卸载 在 Windows 命令提示符下运行: 启动: net start MySQL 停止: net stop MySQL 卸载: sc delete MySQL Sc d ...
- 北京Uber优步司机奖励政策(9月14日~9月20日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...