[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 ...
随机推荐
- hdu 1203 转换的01包问题。。。。
俗话说的话 正难则反.,. 这个基本的思想都用不好的话 回家种田去吧. #include<cstdio> #include<string.h> #include<ios ...
- (十四)Activitivi5之个人任务分配
一.个人任务分配 1.1 方式一:直接流程图配置中写死: 1.2 方式二:使用流程变量 我们在启动流程的时候设置流程变量即可 /** * 启动流程实例 */ @Test public void sta ...
- 安装Docker step by step
1. 系统要求 centos7以上 使用cat /etc/redhat-release查看系统版本,我的Centos 7.6 centos-extra 仓库 enable,默认是打开的 2.安装d ...
- iOS-OC中常见的一些宏
/* 1. 颜色 */ #define PCBRGBColorA(r, g, b, a) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b ...
- Vue.js面试题整理(转载)
一.什么是MVVM? MVVM是Model-View-ViewModel的缩写.MVVM是一种设计思想.Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑:View 代表UI ...
- VUE目录
学前预备知识 ECMAScript简介和ES6的新增语法 Nodejs基础 webpack的介绍 babel简介 vue基础 vue基础
- Linux命令——umask、setuid、setgid、sticky bit、chmod、chown
umask 权限遮罩码,用于控制文件,文件夹的默认权限 文件默认权限: 666-umask 文件夹默认权限: 777-umask 管理员root: umask= ...
- 用js刷剑指offer(数值的整数次方)
题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 保证base和exponent不同时为0 牛客网链接 思路 快速幂算法,举个例 ...
- java 基础:方法调用中的值传递是call by value,并且传递的是参数的值的拷贝,而不是引用
public class TestExtends { public static void main(String[]args){ int s = 10; System.out.println(Sys ...
- Selenium(十一)使用EXCEL读取用户数据和生成测试报表
1.下载两个模块 2.xlrd的使用方法 3.使用excel获取数据 在userdata文件中增加代码: login.py: 4.使用excel生成测试报表 举例: 在log_module中定义函数: ...