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]函数默认参数顺序问题的更多相关文章

  1. 【转】Python函数默认参数陷阱

    [转]Python函数默认参数陷阱 阅读目录 可变对象与不可变对象 函数默认参数陷阱 默认参数原理 避免 修饰器方法 扩展 参考 请看如下一段程序: def extend_list(v, li=[]) ...

  2. Python面试题目之Python函数默认参数陷阱

    请看如下一段程序: def extend_list(v, li=[]): li.append(v) return li list1 = extend_list(10) list2 = extend_l ...

  3. Python 函数(默认参数)

    默认参数 设置默认参数时,有两点需要注意:一是必选参数在前,默认参数在后,否则python的解释器会报错二是当函数有多个参数时,把变化大的参数放前面,变化小的放后面,变化小的参数就可以作为默认参数 d ...

  4. 使用可变对象作为python函数默认参数引发的问题

    写python的都知道,python函数或者方法可以使用默认参数,比如 1 def foo(arg=None): 2 print(arg) 3 4 foo() 5 6 foo("hello ...

  5. python函数默认参数陷阱

    对于学习python的人都有这样的困惑 def foo(a=[]): a.append(5) return a Python新手希望这个函数总是返回一个只包含一个元素的列表:[5].结果却非常不同,而 ...

  6. python函数默认参数为可变对象的理解

    1.代码在执行的过程中,遇到函数定义,初始化函数生成存储函数名,默认参数初识值,函数地址的函数对象. 2.代码执行不在初始化函数,而是直接执行函数体. 代码实例 这要从函数的特性说起,在 Python ...

  7. Python函数默认参数的陷阱

    默认参数实际上只有一个值 代码1 def func(l = 1): l += 1 print(l) func() func() func() 代码2 lst = [] def func(a,l = l ...

  8. python函数默认参数作用域

    当def函数参数默认值为对象时,例如列表[],字典{} 示例1:猜测一下,会输出什么??? def ddd(a,b=[]): b.append(a) return b print(ddd(1)) pr ...

  9. python函数默认参数坑

    def add(a=3,b): print a,b add(4) 这样写的话,运行的话就会报错:SyntaxError: non-default argument follows default ar ...

随机推荐

  1. [异步请求]ajax、axios、fetch之间的详细区别以及优缺点

    1.jQuery ajax  $.ajax({ type: 'POST', url: url, data: data, dataType: dataType, success: function () ...

  2. webAPI中“System.Web.Http.HttpConfiguration”不包含“EnableSystemDiagnosticsTracing”的定义解决办法

    webAPI中“System.Web.Http.HttpConfiguration”不包含“EnableSystemDiagnosticsTracing”的定义 今天从 运行 WebAPI 工程的代码 ...

  3. ASP.NET WEB应用程序(.network4.5)MVC Razor视图引擎2

    https://www.bbsmax.com/A/gAJG67OXzZ/ 在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor.在这之前,我们一直在使用WebForm时代沿留下来的ASP ...

  4. ASP.NET WEB应用程序(.network4.5)MVC 程序的结构解读1

    https://www.cnblogs.com/-beauTiFul/p/8036509.html 简介 开发环境:VS2015 ASP.NET:可以开发出几乎所有运行在Windows上的应用程序:. ...

  5. vue之双向绑定

    Vue的一大核心是双向绑定,在2.0中采用数据劫持,用Object.defineProperty实现,但作者已声明在3.0中会采用proxy实现   Object.defineProperty是什么? ...

  6. jvm系列(七):jvm调优

    转自:https://www.cnblogs.com/ityouknow/p/6437037.html 16年的时候花了一些时间整理了一些关于jvm的介绍文章,到现在回顾起来还是一些还没有补充全面,其 ...

  7. flask小结

    http通讯过程 https://www.cnblogs.com/andy9468/p/10871079.html 1.flask开发环境 https://www.cnblogs.com/andy94 ...

  8. Spark学习笔记1——第一个Spark程序:单词数统计

    Spark学习笔记1--第一个Spark程序:单词数统计 笔记摘抄自 [美] Holden Karau 等著的<Spark快速大数据分析> 添加依赖 通过 Maven 添加 Spark-c ...

  9. 深度学习_1_神经网络_4_分布式Tensorflow

    分布式Tensorflow 单机多卡(gpu) 多级多卡(分布式) 自实现分布式 API: ​ 1,创建一个tf.train.ClusterSpec,用于对集群的所有任务进行描述,该描述对于所有任务相 ...

  10. 19C imp 导入合并表空间

    因为项目需要从9i 导数据到18C,所以发现如下特性 1.18C imp 导入数据,如果表空间在目标库没有,会将表导入到用户默认表空间 2.18C imp 导入数据,如果表空间在目标库有,但缺少权限. ...