什么是在函数调用之间保存数据的pythonic方法?

tem*_*ame 4 python variables state

对我来说,上下文是我需要在调用修改该值的函数之间保留的单个int值.我可以使用全球,但我知道这是气馁的.现在我使用了包含int的列表形式的默认参数,并利用了可变性,以便在调用之间保留对值的更改,如下所示 -

 def increment(val, saved=[0]):
    saved[0] += val
    # do stuff
Run Code Online (Sandbox Code Playgroud)

这个功能通过tkinter附加到一个按钮,就像这样〜

button0 = Button(root, text="demo", command=lambda: increment(val))
Run Code Online (Sandbox Code Playgroud)

这意味着我没有可以分配给函数外部的局部变量的返回值.

人们通常如何处理这个问题?我的意思是,确定,可变性技巧可以工作,但是如果我需要从多个函数中访问和修改该值,该怎么办?

如果没有使用静态方法和内部属性等设置类,是不是可以做到这一点?

shx*_*hx2 5

使用课程.使用实例成员来保持状态.

class Incrementable:
    def __init__(self, initial_value = 0):
        self.x = initial_value
    def increment(self, val):
        self.x += val
        # do stuff
Run Code Online (Sandbox Code Playgroud)

您可以添加__call__模拟函数调用的方法(例如,如果您需要向后兼容).它是否是一个好主意实际上取决于上下文和您的具体用例.

如果没有使用静态方法和内部属性等设置类,是不是可以做到这一点?

它可以,但不涉及具有属性的类/对象的解决方案不是"pythonic".在python中定义类很容易(上面的例子只有5条简单的行),它给你最大的控制和灵活性.

使用python的mutable-default-args"怪异"(我不会称之为"功能")应被视为黑客.