Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何修复代码,以便append将参数添加到列表中?_Python_Python 3.x_List_Append - Fatal编程技术网

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

Python:如何修复代码,以便append将参数添加到列表中?,python,python-3.x,list,append,Python,Python 3.x,List,Append,我对python非常陌生,我一直在尝试使用tkinter button命令来运行函数,它可以工作,但是append()没有执行,这意味着它没有附加到列表中 列表和包含append的函数在类之外,然后通过使用tkinter按钮命令在类内进行分类 我尝试将函数放入类中,它可以工作,但追加不会再次添加到列表中 这是我编写的代码,有点类似于真实代码 价格=[] f=真 类firstclass(): 定义初始化(自): 当f==True时: my_函数() f=假 def my_函数(): 价格。附加(7

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

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

我尝试将函数放入类中,它可以工作,但追加不会再次添加到列表中

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

价格=[]
f=真
类firstclass():
定义初始化(自):
当f==True时:
my_函数()
f=假
def my_函数():
价格。附加(70)
类secondclass():
定义初始化(自):
通过
打印(金额(价格))
真正的代码示例在这个链接中,请考虑这一点


我希望它会打印附加值70,但它仍然打印了0,这是您需要处理的一些问题。首先在类外部赋值
f=True
不会改变类内部的值,因此如果实例化该类,它只会抛出一个
UnboundLocalError
来抱怨f没有初始化。您可以通过使用

fc = firstclass()
如果没有实例化,您就不希望它为您提供所需的价值。它打印零是因为函数secondclass有一个方法中不包含的print语句,因此它打印类声明的值
sum(prices)
。该值来自原始的价格申报值,即
[]
。至少这是你在问题中表现出来的方式。我不确定您是否要缩进print语句,这意味着它是secondclass的一部分。然而,如果您没有缩进,您将得到与您没有实例化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现在是一个类型为
first class
的对象,
\uuuu init\uuuu
方法调用了
my\u函数
将值70附加到
prices

有两个原因

  • 您从未调用
    firstclass
    来实际初始化 构造器
  • 您正试图将
    False
    赋值给变量
    f
    不属于该类的范围。如果你仍然分配 它,它被认为是本地的。此时此刻,翻译 检测到您分配了它,而while循环没有任何本地
    f
    的引用,因为您没有在构造函数下定义它。 有关更多详细信息,请参阅答案
  • 以下是完整的代码:

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

    我在我的真实代码中使用tkinter,我想使用
    tk.Label
    打印总和(价格),并将其放在
    class secondclass()
    def\uuu init\uuuuuu(self,parent,controller)
    中。有没有办法让它位于第二类的
    def\uuuu init\uuuu(self、parent、controller)
    中?嗨!实际上,我在我的真实代码中使用了tkinter,while语句只是替换了
    tk.Button(self,command=my_函数)
    ,而打印是替换
    tk.Label(self,text=sum(prices))
    。按钮在第一类中,而标签在第二类中。有没有办法使价格在第二类的
    \uuuuu init\uuuu
    范围内?或者,如果有任何其他方法可以产生与我预期相同的结果,并在tkinter框架内显示,我也希望知道如何做到这一点。:)很抱歉,我现在没有那么熟悉tkinter,但是是的,你可以在第二个类的
    \uuu init\uuuu
    方法中调用
    firstclass()
    print(sum(prices)
    。然后你可以调用
    secondclass()
    全局,您将得到相同的结果。我刚刚尝试过这样做,但它向我发送了错误类型error:\uuu init\uuuuuuuuuu()缺少2个必需的位置参数:'parent'和'controller',我想这是因为第一类()中的
    \uuuu init\uuuuuuuuuuuuuuuuu>在实际代码中有'def'(self,parent,controller):`你能建议我可以做什么,这样我就不需要放置位置参数了吗?当我全局调用
    secondclass()
    时也会发生同样的情况,因为它同样有这3个位置参数