[python]函数默认参数顺序问题
python 函数参数定义有四类:
1、必选参数:调用函数时候必须赋值的参数。
a,须以正确的顺序传入函数
b,调用时的数量必须和声明时的一样
def exa(x):
return x #b作为参数进入函数体内
b=1
print exa(b) #
print exa()
#错误 TypeError: exa() takes exactly 1 argument (0 given)
2,默认参数:初始已经有值,在调用时未更改使用默认值
def exa(x=1)
return x print exa() #
print exa(2) #
3,可变参数:不确定参数个数,会分配给带“*”参数
def exa(*x)
return x print exa(1,2,3,4,5,6,6)
# (1,2,3,4,5,6,6)
4,关键字参数:使用关键字参数来确定传入的参数值。调用函数时带关键字后,顺序不影响。
def exa(x,y,z):
return x,y,z print exa(y=2,x=3,z=2) #(3, 2, 2)
Tips:可变元组参数和可变字典参数
*x
#可变元组参数,参数格式化存储在一个元组中,长度没有限制。
#python2必须位于普通参数和默认参数之后。
#python3可以位于默认参数之前 def exa(*x):
return x
print exa('ai', 'ni', 'ya')
#('ai', 'ni', 'ya') **x
#可变字典参数
#必须位于参数列表的最后面。
def exa(**x):
return x
print exa(ai="爱",ni="你")
#{'ai': '爱', 'ni': '你'}
函数参数顺序
args与必选参数和默认参数混用
1、python2、python3 三者顺序是:位置参数、默认参数、*args
def foo(x,y=1,*args):
pass
foo (1,2,3,4,5) // 其中的x为1,y=1的值被2替换,3,4,5都给args,即args=(3,4,5)
2、python3 三者顺序是:位置参数、*args、默认参数
def foo(x,*args,y=1):
pass
foo (1,2,3,4,5) // 其中的x为1,2,3,4,5都给args,即args=(2,3,4,5),y始终为1
3、python2、python3 **kwargs与位置参数、*args、默认参数混用
**kwargs:可变字典长度(表示的就是形参中按照关键字传值把多余的传值以字典的方式呈现)
位置参数、*args、**kwargs三者的顺序必须是位置参数、*args、**kwargs
def foo(x,*args,**kwargs):
pass
foo (1,2,3,4,y=5,a=6,b=7) // 其中的x为1,2,3,4都给args,即args=(2,3,4),y=5,a=6,b=7以字典形式传给kwargs,即kwargs={'y':5,'a':6,'b':7}
python2参数顺序:必选参数、默认参数、可变参数,关键字参数。
python2中,默认参数必须在可变参数之前
Python3参数顺序:必选参数,默认参数,*args,**kwargs
python3中,*args也可以在默认参数前,谁在前谁优先拿到值
python2和python3相同的是:
1、必选参数必选在默认参数之前
2、关键字参数在最后
参考:
牛客网问题评论:https://www.nowcoder.com/questionTerminal/d899caec3dc54e60a9a238546e5b363a?toCommentId=2993542
[python]函数默认参数顺序问题的更多相关文章
- 【转】Python函数默认参数陷阱
[转]Python函数默认参数陷阱 阅读目录 可变对象与不可变对象 函数默认参数陷阱 默认参数原理 避免 修饰器方法 扩展 参考 请看如下一段程序: def extend_list(v, li=[]) ...
- Python面试题目之Python函数默认参数陷阱
请看如下一段程序: def extend_list(v, li=[]): li.append(v) return li list1 = extend_list(10) list2 = extend_l ...
- Python 函数(默认参数)
默认参数 设置默认参数时,有两点需要注意:一是必选参数在前,默认参数在后,否则python的解释器会报错二是当函数有多个参数时,把变化大的参数放前面,变化小的放后面,变化小的参数就可以作为默认参数 d ...
- 使用可变对象作为python函数默认参数引发的问题
写python的都知道,python函数或者方法可以使用默认参数,比如 1 def foo(arg=None): 2 print(arg) 3 4 foo() 5 6 foo("hello ...
- python函数默认参数陷阱
对于学习python的人都有这样的困惑 def foo(a=[]): a.append(5) return a Python新手希望这个函数总是返回一个只包含一个元素的列表:[5].结果却非常不同,而 ...
- python函数默认参数为可变对象的理解
1.代码在执行的过程中,遇到函数定义,初始化函数生成存储函数名,默认参数初识值,函数地址的函数对象. 2.代码执行不在初始化函数,而是直接执行函数体. 代码实例 这要从函数的特性说起,在 Python ...
- Python函数默认参数的陷阱
默认参数实际上只有一个值 代码1 def func(l = 1): l += 1 print(l) func() func() func() 代码2 lst = [] def func(a,l = l ...
- python函数默认参数作用域
当def函数参数默认值为对象时,例如列表[],字典{} 示例1:猜测一下,会输出什么??? def ddd(a,b=[]): b.append(a) return b print(ddd(1)) pr ...
- python函数默认参数坑
def add(a=3,b): print a,b add(4) 这样写的话,运行的话就会报错:SyntaxError: non-default argument follows default ar ...
随机推荐
- Java InsertionSort
Java InsertionSort /** * <html> * <body> * <P> Copyright 1994-2018 JasonInternatio ...
- VBA if...else语句
一个if语句由一个布尔表达式和一个或多个语句组成.如果条件评估为True,则执行if条件下的语句.如果条件评估为False,则执行else部分块下的语句. 语法 以下是VBScript中的if els ...
- win中使用curl上传文件报错
今天晚上复现“WordPress插件Easy WP SMTP反序列化漏洞”时,需要使用curl上传文件,我又用的windows环境,一直出错 curl: (26) couldn't open file ...
- SpringBoot中使用POI,快速实现Excel导入导出
导出Excel 整体来说,Excel有.xls和.xlsx,那么在POI中这两个也对应两个不同的类,但是类名不同,方法基本都是一致的,因此我这里将只介绍.xls一种. 整体来说,可以分为如下七个步骤: ...
- Vue router link
html: <router-link to="test">Go to Foo</router-link> <router-link to=" ...
- 如何在SAP Kyma的控制台里扩展新的UI
方法是创建一个新的resource,类型为ClusterMicroFrontend. 使用命令行kubectl get ClusterMicroFrontend查看这些UI扩展: 最后自定义的UI出现 ...
- ubuntu16.04安装zabbix-server3.4
一.安装前环境准备 部署zabbix需要安装apache,mysql和php sudo apt-get install apache2 sudo apt-get install mysql-serve ...
- zabbix监控MySQL,Tomcat及配置邮件报警
目录 一.思路 二.部署.配置 环境 安装zabbix 对zabbix进行初步优化 添加监控主机 部署监控Tomcat 配置邮件报警 三.总结 一.思路 首先搭建zabbixserver,本机需要安装 ...
- 自定义printf 打印函数
文章转载自:https://blog.csdn.net/varding/article/details/8109440 我们在程序里经常需要打印一些字符串来调试或者显示,最简单的方法: char ...
- No package libmcrypt available.
Centos安装PHP时,安装php依赖包时yum install libmcrypt libmcrypt-devel,报错如下: No package libmcrypt available. No ...