Python,使变量在“稍微更全局”的范围内定义

时间:2013-07-24 17:36:35

标签: python function python-2.7 global

让我们考虑以下脚本:

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

有没有办法让对象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()放在一个()中。然后,同样的问题,我想使用在b()中创​​建的对象来创建对象my_blabla。你会如何处理这个问题?

我希望我的解释有意义!他们呢?

谢谢!

4 个答案:

答案 0 :(得分:2)

您可以使用返回语句,例如

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

答案 1 :(得分:1)

正如约什所说:

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

答案 2 :(得分:0)

不在python中。您可以使用以下

来表达它
def a():
   smth = []
   def b():
      smth = 3
   if smth != []:   
      print smth

我强烈反对这一点,因为你打开了一系列难以修复的潜在错误。我建议您的b()函数返回它在其他地方创建的任何内容

def b():
    smth = 3
    return smth

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

答案 3 :(得分:0)

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

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