如何在python中创建新的作用域

2024-03-28 18:53:07 发布

您现在位置:Python中文网/ 问答频道 /正文

在许多语言(和地方)中,通过创建类似this的块来创建本地作用域是一种很好的做法。

void foo()
{
     ... Do some stuff ...

     if(TRUE)
     {
         char a;
         int b;

         ... Do some more stuff ...
     }

     ... Do even more stuff ...
 }

如何在python中实现这一点,而不出现意外的缩进错误,也不使用某种if True:技巧


Tags: 语言trueiffoomore地方somethis
3条回答

Python有两个作用域,本地和全局。函数中使用的变量在本地范围内,无论它们是在什么缩进级别创建的。调用嵌套函数将产生您正在寻找的效果。

def foo():
  a = 1

  def bar():
    b = 2
    print a, b #will print "1 2"

  bar()

仍然像其他人一样,我不得不问你为什么要在函数中创建一个有限的范围。

无论如何,为什么要在python中创建新的作用域?

在其他语言中这样做的正常原因是变量作用域,但在python中不会发生这种情况。

if True:
    a = 10

print a

在Python中,作用域有三种类型:全局、局部和类。您可以创建专门的“scope”字典以传递给exec/eval()。此外,还可以使用嵌套作用域 (在另一个函数中定义一个函数)。我发现这些在我所有的代码中都足够了。

正如Douglas Leeder已经说过的,在其他语言中使用它的主要原因是变量作用域,而这在Python中并不真正发生。此外,Python是我使用过的最可读的语言。做一些像“如果是真的”的把戏(你说你想避免的)会违背可读性的原则。在这种情况下,我认为最好的办法是将代码重构成多个函数,或者使用单个作用域。我认为Python中可用的作用域足以覆盖所有的事件,因此本地作用域不应该是真正必要的。

我希望这能有帮助。

相关问题 更多 >