这个问题在这里已经有了答案:Accessingclassvariablesfromalistcomprehensionintheclassdefinition(8个答案)关闭5年前。这里我无法访问Python中的类变量列表理解。classStudent:max_year=18year_choice=[iforiinrange(100)ifi>max_year]def__init__(self,name):self.name=nameprint(self.year_choice)Student('Blah')但它在Python2中运行良好。../workspace$pythonstude
我在这里回答了一个问题:comprehensionlistinpython2worksfinebutigetanerrorinpython3OP的错误是对最大范围和索引使用了相同的变量:x=12y=10z=12n=100ret_list=[(x,y,z)forxinrange(x+1)foryinrange(y+1)forzinrange(z+1)ifx+y+z!=n]这只是一个Python-3错误,并且与添加到理解中的范围有关,以避免此处定义的变量“泄漏”。更改变量名称可以解决这个问题。错误是:UnboundLocalError:localvariable'y'referencedb
Python中有没有一种方法可以管理范围,以便调用函数中的变量在被调用函数中可见?我想要类似下面的东西z=1defa():z=z*2printzdefb():z=z+1printza()printzb()我想得到以下输出242这个问题的真正解决方案就是将z作为变量传递。我不想这样做。我有一个庞大而复杂的代码库,其中包含各种专业水平的用户。他们目前接受的培训是传递一个变量,现在我必须添加另一个变量。我不相信他们会通过所有函数调用始终如一地传递第二个变量,所以我正在寻找一种维护接口(interface)的替代方法。这很有可能是不可能的。 最佳答案
当引用全局变量时,可以看出函数和类的处理方式不同。第一个很好,第二个导致错误:x=10classFoo():x=x+1a=foo()对比:x=10deffaa():x=x+1faa()在Pythonexecutionmodel,这被描述为:Aclassdefinitionisanexecutablestatementthatmayuseanddefinenames.Thesereferencesfollowthenormalrulesfornameresolutionwithanexceptionthatunboundlocalvariablesarelookedupintheglob
采用以下代码:importsomethingdefFoo():something=something.SomeClass()returnsomething...这显然不是有效代码:UnboundLocalError:localvariable'something'referencedbeforeassignment...因为局部变量something被创建,但没有赋值,在=的RHS被评估之前。(例如,请参见thisrelatedanswer'scomment。)这对我来说似乎有点奇怪,但可以肯定的是,我会接受它。现在,为什么下面的代码有效?classFoo(object):someth
这是来自RichardJones'Blog的一些代码:withgui.vertical:text=gui.label('hello!')items=gui.selection(['one','two','three'])withgui.button('clickme!'):defon_click():text.value=items.valuetext.foreground=red我的问题是:他到底是怎么做到的?上下文管理器如何访问withblock内的范围?下面是一个基本模板,用于尝试解决这个问题:from__future__importwith_statementclassbutt
这个问题在这里已经有了答案:Shortdescriptionofthescopingrules?(9个回答)关闭3个月前。有时我发现我必须使用长名称的函数,例如os.path.abspath和os.path.dirname很多只需几行代码。我认为不值得在全局命名空间中乱放这样的函数,但是如果能够在我需要这些函数的行周围定义一个范围,那将是非常有帮助的。例如,这将是完美的:importos,sysclosure:abspath=os.path.abspathdirname=os.path.dirname#15linesofheavyusageofthosefunctions#Can'ta
我正在将一些代码从lisp翻译成Python。在lisp中,您可以使用let构造,其中引入的变量声明为特殊变量,因此具有动态范围。(参见http://en.wikipedia.org/wiki/Dynamic_scope#Dynamic_scoping)我怎样才能在Python中做同样的事情?似乎该语言不直接支持这一点,如果是这样,那么模拟它的好方法是什么? 最佳答案 我觉得Justice在这里的推理是显而易见的。另一方面——我无法抗拒为另一个对Python来说“不自然”的编程范例实现概念验证——我只是喜欢这样做。:-)因此,我创建
给定:deff():x=0defg():h()defh():x+=1print(x)g()>>>f()Traceback(mostrecentcalllast):File"",line1,inFile"",line8,infFile"",line4,ingFile"",line6,inhUnboundLocalError:localvariable'x'referencedbeforeassignment>>>如何让h看到x变量?谢谢。编辑早该提一下,我用的是Python2.7.3 最佳答案 你可以让x成为functionattri
我理解Python中局部变量和全局变量的概念,但我有一个问题,为什么错误会像下面的代码那样出现。Python逐行执行代码,因此它直到读取第5行才知道a是局部变量。Python是否会在尝试执行第5行后返回一行并将其标记为错误?a=0deftest():printa#line4,Error:localvariable'a'referencedbeforeassignmenta=0#line5test() 最佳答案 设置和测试为了分析您的问题,让我们创建两个独立的测试函数来复制您的问题:a=0deftest1():print(a)test