Python:如何修复代码,以便append将参数添加到列表中?

2024-05-16 14:12:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python非常陌生,我一直在尝试使用tkinter按钮命令来运行函数,它可以工作,但是append()没有执行,这意味着它没有附加到列表中。你知道吗

包含append的列表和函数在类外部,然后通过使用tkinter button命令在类内部进行分类

我试着把函数放在类中,它可以工作,但是追加不会再添加到列表中。你知道吗

这是我编写的代码,有点类似于真实的代码

prices = []

f = True
class firstclass():
    def __init__(self):
        while f == True:
            my_function()
            f = False

def my_function():
    prices.append(70)


class secondclass():

    def __init__(self):
        pass

    print(sum(prices))

真正的代码样本在这个环节,请考虑到这一点 python: Appending a value to a list outside the class, function with append also outside the class, but function is called within a class

我原以为它会打印附加值70,但它仍然打印0


Tags: 函数代码命令selftrue列表inittkinter
2条回答

一些你需要处理的问题。首先在类外赋值f=True不会改变类内的值,因此如果实例化类,它只会抛出一个UnboundLocalError来抱怨f没有初始化。您可以通过使用

fc = firstclass()

如果没有实例化,你就没有希望它给你想要的价值。因为函数secondclass的print语句不包含在方法中,所以它打印的是类声明的值sum(prices)。该值来自价格的原始声明值,即[]。至少你在问题中是这样表达的。我不知道你是不是想缩进打印语句,这意味着它是第二类的一部分。但是,如果不缩进,将得到与未实例化firstclass相同的结果。你知道吗

要更正此问题,请参见下文。此代码将按预期输出70。你知道吗

prices = []

class firstclass():
    def __init__(self):
        my_function()

def my_function():
    prices.append(70)

class secondclass():
    def __init__(self):
        pass

print('before instantiation', sum(prices))
fc = firstclass()
print('after instantiation', sum(prices))

fc现在是类型为firstclass的对象,__init__方法调用了my_function,将值70附加到prices。你知道吗

这有两个原因。你知道吗

  1. 您从未调用firstclass来实际初始化 建造师。你知道吗
  2. 您正试图将False赋值给变量f 不属于类的范围。如果你仍然分配 它被认为是本地的。现在翻译 检测到您分配了它,而while循环没有任何本地 引用f,因为您没有在构造函数下定义它。 详见this答案。你知道吗

以下是完整的代码:

prices = []
class firstclass():
    f = True
    def __init__(self):
        while self.f:
            my_function()
            self.f = False
def my_function():
  prices.append(70)


class secondclass():
    def __init__(self):
        pass

firstclass()
print(sum(prices))

相关问题 更多 >