Python函数默认参数的陷阱】的更多相关文章

默认参数实际上只有一个值 代码1 def func(l = 1): l += 1 print(l) func() func() func() 代码2 lst = [] def func(a,l = lst): l.append(a) print(l)func(1) # [1] func(2,[]) # [2] func(3) # [1,3]变量是变量,值是值 变量的名字和有多少个值没有对应关系 我们在看修改的时候:要看修改的是哪一个对应的值而不是变量 def func(l = []): # 在函…
[转]Python函数默认参数陷阱 阅读目录 可变对象与不可变对象 函数默认参数陷阱 默认参数原理 避免 修饰器方法 扩展 参考 请看如下一段程序: def extend_list(v, li=[]): li.append(v) return li list1 = extend_list(10) list2 = extend_list(123, []) list3 = extend_list('a') print(list1) print(list2) print(list3) print(li…
请看如下一段程序: def extend_list(v, li=[]): li.append(v) return li list1 = extend_list(10) list2 = extend_list(123, []) list3 = extend_list('a') print(list1) print(list2) print(list3) print(list1 is list3) 请先猜想打印的结果: 是不是这样: [10] [123] [a] False 但是,实际的打印效果 请…
对于学习python的人都有这样的困惑 def foo(a=[]): a.append(5) return a Python新手希望这个函数总是返回一个只包含一个元素的列表:[5].结果却非常不同,而且非常惊人(对于新手来说): >>> foo() [5] >>> foo() [5, 5] >>> foo() [5, 5, 5] >>> foo() [5, 5, 5, 5] >>> foo() 实际上,这不是设计缺陷…
写python的都知道,python函数或者方法可以使用默认参数,比如 1 def foo(arg=None): 2 print(arg) 3 4 foo() 5 6 foo("hello world") 一个很简单的函数,参数arg默认使用None,当调用foo函数时,可以传入一个参数,也可以不传入参数,运行结果如下 1 None 2 hello world 这很好理解.默认参数是python一个很好的特性. 但是如果使用可变对象作为默认参数,就会引发问题.之前写过一个脚本,bug不…
1.代码在执行的过程中,遇到函数定义,初始化函数生成存储函数名,默认参数初识值,函数地址的函数对象. 2.代码执行不在初始化函数,而是直接执行函数体. 代码实例 这要从函数的特性说起,在 Python 中,函数是第一类对象(function is the first class object),换而言之,函数也是对象,跟整数.字符串一样可以赋值给变量.当做参数传递.还可以作为返回值.函数也有自己的属性,比如函数的名字.函数的默认参数列表. # 函数的名字 >>> func.__name_…
默认参数 设置默认参数时,有两点需要注意:一是必选参数在前,默认参数在后,否则python的解释器会报错二是当函数有多个参数时,把变化大的参数放前面,变化小的放后面,变化小的参数就可以作为默认参数 def power(x,n=2): s=1 while n>0: n=n-1 s=s*x return s print power(5,2) #25 print power(5) #25 调用power(5)时,相当于调用了power(5,2),而对于n>3的情况,就必须明确的传入n,比如power…
python 函数参数定义有四类: 1.必选参数:调用函数时候必须赋值的参数. a,须以正确的顺序传入函数b,调用时的数量必须和声明时的一样 def exa(x): return x #b作为参数进入函数体内 b=1 print exa() #错误 TypeError: exa() takes exactly 1 argument (0 given) 2,默认参数:初始已经有值,在调用时未更改使用默认值 def exa(x=1) return x 3,可变参数:不确定参数个数,会分配给带“*”参…
当def函数参数默认值为对象时,例如列表[],字典{} 示例1:猜测一下,会输出什么??? def ddd(a,b=[]): b.append(a) return b print(ddd(1)) print(ddd(2,['a','b','c'])) print(ddd(3)) [1]  ['a','b','c','2'] [3]   ?????你是否认为是这样? 输出一下看看 输出结果: D:\Python27\python.exe D:/untitled1/temp5.py [1] ['a'…
def add(a=3,b): print a,b add(4) 这样写的话,运行的话就会报错:SyntaxError: non-default argument follows default argument 意思就是默认赋值的参数必须在没有赋值的参数的后面 def add(a,b=3),函数这样定义的话下面调用的时候就不会报错了. 这也是在学习的过程中没有注意到的,在使用中才发现有这么一个坑.…