Python函数中的参数(二)
当使用混合特定的参数匹配模型时,Python将会遵循以下有关顺序的法则:
1、在函数调用中,参数必须以这样的顺序出现:任何位置参数(Value)、任何关键字参数(name = Value)和*sequence形式的组合,最后是**dict形式
2、在函数头部,参数必须以如下的顺序出现:任何一般参数、任何默认参数、如果有的话,是*name(在Python3.0中是*)的形式,然后是任何name或name=value keyword-only参数,最后是**name形式
Python内部是使用以下的步骤来在赋值前进行参数匹配的:
1、通过位置分配非关键字参数
2、通过匹配变量名分配关键字参数
3、其他额外的非关键字参数分配到*name元组中
4、其他额外的关键字参数分配到**name字典中
5、用默认值分配给在头部未得到分配的参数
例子:
1、不含有特殊匹配法的函数,会按照位置从左至右的匹配变量名
def f(a, b, c):
print(a, b, c)
f(1,2,3) #输出结果
1 2 3
2、关键字参数的匹配
def f(a, b, c):
print(a, b, c) f(c = 3, b = 2, a = 1) #输出结果
1 2 3
3、默认参数
def f(a, b = 2, c = 3):
print(a, b, c) f(1) #输出结果
1 2 3
def f(a, b = 2, c = 3):
print(a, b, c) f(1,4)
输出结果:
1 4 3 f(1,c = 6) 输出结果:
1 2 6
4、关键字参数和默认参数的混合
def func(spam, eggs, toast = 0, ham = 0):
print((spam,eggs,toast,ham)) func(1,2)
#输出结果
(1, 2, 0, 0) func(1, ham = 1, eggs = 0)
#输出结果
(1, 0, 0, 1) func(spam = 1, eggs = 0)
#输出结果
(1, 0, 0, 0) func(1,2,3,4)
#输出结果
(1, 2, 3, 4)
5、任意参数的实例
def func(*args):
print("#输出结果")
print(args) func()
#输出结果
() func(1)
#输出结果
(1,) func(1,2,3,4)
#输出结果
(1, 2, 3, 4)
def f(**args):
print("#输出结果")
print(args) f()
#输出结果
{} f(a = 1, b = 2)
#输出结果
{'a': 1, 'b': 2}
6、混合参数实例
def f(a, *pargs, **kargs):
print("#输出结果:")
print(a, pargs, kargs) f(1, 2, 3, x = 1, y = 2)
#输出结果:
1 (2, 3) {'y': 2, 'x': 1}
Python函数中的参数(二)的更多相关文章
- Python 函数中,参数是传值,还是传引用?
在 C/C++ 中,传值和传引用是函数参数传递的两种方式,在Python中参数是如何传递的?回答这个问题前,不如先来看两段代码. 代码段1: def foo(arg): arg = 2 print(a ...
- python函数中的参数类型
python函数中的参数 动态获取函数的参数 python的函数类型详解
- 在python函数中默认参数的一些坑
一.默认参数 python为了简化函数的调用,提供了默认参数机制: 这样在调用pow函数时,就可以省略最后一个参数不写: 在定义有默认参数的函数时,需要注意以下: 必选参数必须在前面,默认参数在后: ...
- Python函数中的参数(一)
函数传递参数时的简要关键点: 1.参数的传递是通过自动将对象赋值给本地变量名来实现的.函数参数在实际中只是Python赋值的一个实例.因为引用是以指针的形式实现的,所有的参数实际上都是通过指针进行传递 ...
- python函数中的参数(关键字参数,默认参数,位置参数,不定长参数)
默认参数:定义函数的时候给定变量一个默认值. def num(age=1): 位置参数:调用函数的时候根据定义函数时的形参位置和实参位置进行引用. 关键字参数:如果定义的函数中含有关键字参数,调用函数 ...
- Python函数中的参数
形参:形式参数 实参:实际参数 1.普通参数:严格按照顺序将实参赋值给形参. 2.默认参数:必须放置在参数列表的最后. 3.指定参数:将实参赋值给制定参数. 4.动态参数: *:默认将传入的参数,全部 ...
- Python函数中的可变参数
在Python函数中,还可以定义可变参数. 如:给定一组数字a,b,c……,请计算a2 + b2 + c2 + ……. 要定义出这个函数,我们必须确定输入的参数.由于参数个数不确定,我们首先想到可以把 ...
- python函数中把列表(list)当参数时的"入坑"与"出坑"
在Python函数中,传递的参数如果默认有一个为 列表(list),那么就要注意了,此处有坑!! 入坑 def f(x,li=[]): for i in range(x): li.append(i*i ...
- Python函数中参数类型
在学习Python函数的时候,函数本身的定义和调用并不是很复杂,但是函数的参数类型和用法的确有些复杂.在此做一个小结,加深理解. Python参数的定义 负责给函数提供一些必要的数据或信息,以保证函数 ...
随机推荐
- bugzilla4的xmlrpc接口api调用实现分享: xmlrpc + https + cookies + httpclient +bugzilla + java实现加密通信下的xmlrpc接口调用并解决登陆保持会话功能
xmlrpc . https . cookies . httpclient.bugzilla . java实现加密通信下的xmlrpc接口调用并解决登陆保持会话功能,网上针对bugzilla的实现很 ...
- Struts2之过滤器和拦截器的区别
刚学习Struts2这个框架不久,心中依然有一个疑惑未解那就是过滤器和拦截器的区别,相信也有不少人跟我一样对于这个问题没有太多的深入了解 那么下面我们就一起来探讨探讨 过滤器,是在java web中, ...
- 传智播客JavaWeb day05-session、url重写
1.session是什么 1.1 session是一种会话技术 ps:还有一种是cookie 2.session的作用 2.1 服务器端会话范围内的数据共享 3.session的生命周期 3.1何时 ...
- 12-1 mysql的增删改减
增加数据:insert into 表名 values('','');insert into 表名(列名) values('');注意:1.如果添加 得数据是字符串,需要加'',其他类型不要加. 2.添 ...
- ng-repeat指令中使用track by子语句解决重复数据遍历的错误
用ng-repeat指令遍历一个javascript数组,当数组中有重复元素的时候,angularjs会报错,这是因为ng-Repeat不允许collection中存在两个相同Id的对象. 对于数字或 ...
- LintCode Search a 2D Matrix II
排好序的二维数组, 从上到下从左到右增大, 给出一个数找出此数组里有多少个这个数. 不用两个循环做, 着手于条件(从左下角开始,若相等往右上跳一个,若小于target往右边跳一个,若大于target往 ...
- mm/vmalloc.c
/* * linux/mm/vmalloc.c * * Copyright (C) 1993 Linus Torvalds */ #include <asm/system.h>#in ...
- [NOIP2009] 靶形数独(搜索+剪枝)
题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了他最近发明的 ...
- UVA340 猜数字游戏
一个经典的找数字位置正确并且找到正确数列中存在的数字而错误的序列存在但是不是正确位置的算法. 看似很难的算法,但是lrj却很简单解决. #include<cstdio> #define M ...
- 转--Eclipse中ctrl+shift+r与ctrl+shift+t的区别
Eclipse中ctrl+shift+r与ctrl+shift+t的区别 标签: 快捷键工作区文件搜索打开资源文件 2016-09-13 15:44 292人阅读 评论(0) 收藏 举报 分类: e ...