zoukankan      html  css  js  c++  java
  • python函数的坑

    一、默认参数的坑,如果你的默认参数指向的是可变的数据类型,那么你无论调用多少次这个默认参数,都是同一个。


    
    
    def func(a,list=[]):
       list.append(a)
    return list

    print(func(10,),id(list)) #[10]
    print(func(20,[]),id(list)) #20 [] 这里传了一个空列表,只要传了值,就用传值的。
    print(func(100,),id(list)) #[10, 100] 没有传值,故沿用第一个空列表,而第一个空列表在第一次执行时加了一个10.

    def func(a,list=[]):
    list.append(a)
    return list

    ret1=func(10,)
    ret2=func(20,[])
    ret3=func(100,)
    print(ret1) #[10, 100] 此组是执行完了func(100,)再打印,故ret1和ret3是同一个列表,值也相同。
    print(ret2) # [20]
    print(ret3) #[10, 100] 此组是执行完了func(100,)再打印,故ret1和ret3是同一个列表,值也相同。

    二。global和nonlocal
    # def wrapper():
    # count=1
    # def inner():
    # nonlocal count #内层函数对外层函数的局部变量进行修改用nonlocal。
    # count+=1
    # print(count)
    # inner()
    # wrapper()

    def func():
    global name
    name='太白金星'
    print(name)
    func()
    print(name) #使用global在局部申明(创建)了一个全局变量,函数一执行,name就可以打印。
    # 但如果注释掉上一句func(),则函数只是加载,没有执行,就会报name错误。
  • 相关阅读:
    程序片段--2的乘方
    Set、Map集合、栈、队列
    Map迭代(六种)
    Struts2标签--控制标签
    线性表
    数据结构笔记(1)
    spingMVC问题小结
    《浪潮之巅》十四章笔记
    《浪潮之巅》十三章笔记
    《浪潮之巅》十二章笔记
  • 原文地址:https://www.cnblogs.com/qqq789001/p/13363066.html
Copyright © 2011-2022 走看看