默认参数的陷阱自我心得

  • 默认参数的陷阱 : 默认参数实际上只有一个值

    • 代码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 = []): # 在函数定义的时候 创建了个[]
  • pass                # 对于默认参数来说,[]只定义一次
  • def func2(a = 0):
  • a += 1 a = a + 1 = 0 + 1 = 1 局部变量 会随着这个函数的调用而消失
  • print(a)func2()func2()
  • 闭包的概念和代码
    • 闭包: 内部函数使用了外部函数的变量,内部函数就是一个闭包
    • 代码
      • def func(*args):
      • sum_num = 0
      • for num in args:
      • sum_num += num
      • def inner():
      • return sum_num
      • return inner
      • inner = func(1,2,3,4)
      • inner()

原文地址:https://www.cnblogs.com/kujiawei/p/9907459.html

时间: 2024-11-10 05:12:48

默认参数的陷阱自我心得的相关文章

默认参数的陷阱

默认参数的陷阱 : 默认参数实际上只有一个值 如果是可变数据类型,无论这个函数被调用多少次, 共用这个默认参数a = []b = []a.append(1)print(a,b) a = []b = aa.append(1)print(a,b) 变量是变量,值是值变量的名字和有多少个值 没有对应关系我们在看修改的时候 : 要看修改的是哪一个具体的值而不是变量 l = [] # 在定义函数之前定义了一个[]def func(): l.append(1)func()func()func()func()

Python(55)_默认参数的陷阱

#-*-coding:utf-8-*- ''' 函数复习 ''' def f(): return 'bowen' print(2+3) # 事实上python中会调用内部的函数,相当于add() print(f()) def wahaha(*args): print(args) wahaha(1,2,3) l = [1,2,3] wahaha(*l) ''' 默认参数的陷阱 如果默认参数的值是一个可变数据类型,那么每一次调用的时候,不传值就公用这个数据类型的资源 简单的说,就是不传值的情况下,始

Python中list作为默认参数的陷阱

在Python中,作为默认参数的一定要是不可变对象,如果是可变对象,就会出现问题,稍不注意,就会调入陷阱,尤其是初学者,比如我(┬_┬). 我们来看一个例子. 1 def add(L=[]): 2 L.append(1) 3 return L 4 5 L = [1, 2, 3] 6 newL = add(L) 7 print(newL) 8 newL = add(newL) 9 print(newL) 10 11 testL = add() 12 print(testL) 13 testL =

易错点 默认参数陷阱

默认参数陷阱 可变的数据类型 (列表)------用于实际开发中不可变数据类型(字符串,数字,元组 ====易错点如下==== def func(l=[]): l.append(123) print(l) func() func([]) func() # [123] # [123] # [123, 123]

Python函数参数默认值的陷阱和原理深究(转)

add by zhj: 在Python文档中清楚的说明了默认参数是怎么工作的,如下 "Default parameter values are evaluated when the function definition is executed. This means that the expression is evaluated once, when the function is defined, and that the same “pre-computed” value is used

python函数默认参数陷阱

对于学习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的人都有这样的困惑 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 当list,dic作为默认参数的坑爹之处

先看代码: def foo(a, b =[]): b.append(a) print b foo(1) foo(2) 结果想象中是: >>> [1] [2] >>> 实际上是: >>> [1] [1, 2] >>> 查看官方文档:https://docs.python.org/2.7/tutorial/controlflow.html#default-argument-values The default values are eva

Python函数的默认参数的设计【原创】

在Python教程里,针对默认参数,给了一个“重要警告”的例子: def f(a, L=[]): L.append(a) return L print(f(1)) print(f(2)) print(f(3)) 默认值只会执行一次,也没说原因.会打印出结果: [1] [1, 2] [1, 2, 3] 因为学的第一门语言是Ruby,所以感觉有些奇怪. 但肯定的是方法f一定储存了变量L. 准备知识:指针 p指向不可变对象,比如数字.则相当于p指针指向了不同的内存地址. p指向的是可变对象,比如lis