Discuss / Python / 准备迎接装饰器= =

准备迎接装饰器= =

Topic source
import time
def count():
    a = ["学","到","这","我","想","哭","没","想","到","后","面","更","难"]
    def f():
        for x,i in enumerate(a):
            print(x,i+"!")
            if i == a[-1]:
                time.sleep(1)
                print("But think later, still insist on")
    return f

顽石47534

#2 Created at ... [Delete] [Delete and Lock User]
def count3():
    l = []
    a = ["学", "到", "这", "我", "想", "哭", "没", "想", "到", "后", "面", "更", "难"]

    def f():
        print(x, i + "!")
        if i == a[-1]:
            time.sleep(1)
            print("But think later, still insist on")

    for x, i in enumerate(a):
        l.append(f)
    return l


 for f in count3():
        f()

其实廖老师想告诉的是这个东西。若是函数里面依赖于外部作用域的变量。且该变量能发生或者会发生变化,后面的lazy call就是有意想不到的事情发生。

其实避免很简单。函数里面尽可能使用内部变量,要是有依赖于外部变量,使用参数传进去,看起来比较新颖,只要熟悉点语言,倒也没有什么花俏的东西可以玩。

槭陌

#3 Created at ... [Delete] [Delete and Lock User]
def count3():
    l = []
    a = ["学", "到", "这", "我", "想", "哭", "没", "想", "到", "后", "面", "更", "难"]
    def f(x,i):
        def g():
           print(x, i + "!")
           if i == a[-1]:
               time.sleep(1)
               print("But think later, still insist on")
        return g 
    for x, i in enumerate(a):
        l.append(f(x,i)) 
    return l

  • 1

Reply