在Python中阻塞作用域

当你用其他语言编写代码时,你有时候会创build一个块范围,像这样:

statement ... statement { statement ... statement } statement ... statement 

一个目的(很多)是为了提高代码的可读性:显示某些语句形成一个逻辑单元,或者某些局部variables只在该块中使用。

在Python中做同样的事情是否有一种惯用的方式?

不,没有语言支持来创build块范围。 创build范围的唯一方法是函数,类或模块。

在Python中的惯用方式是保持你的function简短。 如果你认为你需要这个,重构你的代码! 🙂

Python为每个模块,类,函数或生成器expression式(在Python 3.x中也为列表parsing)创build一个新的作用域。 除此之外,函数内部没有嵌套的作用域。

你可以通过在你的函数中声明一个函数然后立即调用它来做类似于Python中的C ++块范围的事情。 例如:

 def my_func(): shared_variable = calculate_thing() def do_first_thing(): ... = shared_variable do_first_thing() def do_second_thing(): foo(shared_variable) ... do_second_thing() 

如果你不确定你为什么想要这样做,那么这个video可能会说服你。

基本的原则是尽可能地把范围尽可能地紧凑,而不会将任何“垃圾”(额外的types/函数)引入到比绝对需要的范围更广泛的范围内 – 没有其他人想要使用do_first_thing()方法,因此它不应该是在调用函数之外的作用域。