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

时间:2019-07-13 01:44:38

标签: python python-3.x list append

我对python很陌生,我一直在尝试使用tkinter button命令运行函数的代码,它可以工作,但是append()未执行,这意味着它不会追加到列表中

列表和包含追加的函数在类之外,然后通过使用tkinter按钮命令在类内分类

我尝试将函数放在类中,它可以工作,但是追加没有再次添加到列表中。

这是我编写的与真实代码有些相似的代码

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

2 个答案:

答案 0 :(得分:1)

您需要处理的一些问题。首先在类外部分配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 :(得分:1)

发生这种情况有两个原因。

  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))