0

让我们考虑以下脚本:

def a():
   def b():
      smth = 3
   print smth

有什么办法可以使对象不是在全局范围内定义,而是在 a() 函数的范围内,尽管我们在 b() 函数内创建它?

就像是:

def a():
   def b():
      smth = 3
      a_bit_more_global smth
   print smth

原因如下:

class Blabla(object):
   def __init__(self,q,w)
     self.q = q
     self.w=w
def a():
   def b():
      smth_2 = smth_1 + 1
      global smth_2
   smth_1 = 2
   fen1 = Tk()
   ...
   ...
   Button(...,command=b).grid()
   my_blabla = Blabla(smth_1,smth_2)
   return my_blabla

我一开始不知道如何将额外的参数传递给函数 b()。我终于想到我可以把 b() 放在 a() 里面。然后,同样的问题,我想使用在 b() 中创建的对象来创建对象 my_blabla。你会如何处理这个问题?

我希望我的解释是有道理的!他们吗?

谢谢 !

4

4 回答 4

2

您可以只使用 return 语句,例如

def a():
   def b():
      smth = 3
      return smth
   smth = b()
   print smth
于 2013-07-24T17:50:16.050 回答
1

正如乔希所说:

替换类中的函数并将 smth_2 存储为 self.smth_2

于 2013-07-24T18:59:37.753 回答
0

不在python中。您可以使用以下内容来喜欢它

def a():
   smth = []
   def b():
      smth = 3
   if smth != []:   
      print smth

我强烈反对这样做,因为您会打开大量难以修复的潜在错误。我建议你的b()函数返回它创建的任何你在其他地方需要的东西

def b():
    smth = 3
    return smth

如果你绝对必须做这样的事情,我会考虑另一种语言,比如 C++,你可以smth动态分配

于 2013-07-24T17:45:17.420 回答
0

一个例子等于一千个答案:

def a():
   def b():
      smth = 3
      return smth
   smth = b()
   print smth
于 2013-07-24T18:15:44.413 回答