匿名代码块

Mai*_*ann 6 python

前言:

到目前为止,我已经将Python用作全面的编程语言.现在我喜欢用它来记录一些注释(注释)和一些计算(Python代码)(我实际上是使用Emacs并将当前缓冲区一次又一次地发送到正在运行的IPython实例).

问题:我喜欢在同一个文档中多次重用一些常见的变量名,如'A'或'd',而不会遇到我不小心忘记将值重新分配给其中一个变量名的问题.

到目前为止,我滥用了课堂陈述

# Topic one: bla bla
class _anon:
    d = 10
    A = d**2 * pi /4

# Topic two: bla bla
class _anon:
    A = d**2 * pi /4 # error is raised since d is missing
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为类语句创建了一个作为变量作用域的执行框架,但我想知道这个用例是否有专用语法.

dha*_*ech 5

如果我想模拟 C/C++ 块,这通常可以解决问题:

def _anon():
    d = 10
    A = d**2 * pi /4
_anon()
Run Code Online (Sandbox Code Playgroud)

这些“块”可以嵌套。


如果一小块初始样板是可以接受的,您还可以使用装饰器来调用该函数:

def block(function):
    function()
Run Code Online (Sandbox Code Playgroud)

现在你不必重复它的名字:

@block
def _anon():
    d = 10
    A = d**2 * pi /4
Run Code Online (Sandbox Code Playgroud)

请注意,函数装饰器通常会返回一个函数,但这个函数不会。结果是执行代码后名字“_anon”指向“None”,所以代码块真的是匿名的。


小智 3

不。只有classanddef块和模块(以及在更新的版本中,列表推导式和生成器表达式 - 但在这里不适用)引入了新的范围。并且只有类直接执行。因此,如果你想继续这种有争议的 Python 使用方式,你就必须坚持滥用class,或者定义函数并直接调用它们。在源代码级别为每个计算使用不同的文件稍微不那么难看,但如果计算总是那么小,可能不值得。