python中变量的限制

2024-04-26 21:48:44 发布

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

我意识到这可能有点宽泛,并认为这是一个有趣的问题,我还没有真正看到答案。它可能隐藏在python文档中的某个地方,但由于我是python新手,所以还没有全部读完。在

所以。。有没有什么东西是我们不能设定为变量的一般规则?python中的所有东西都是一个对象,我们可以使用变量来存储字符串、整数、变量别名、列表、调用类的引用等,如果我们聪明的话,甚至可以像下面这样,在任何可能有用的地方,我都可以马上想到

var = lambda: some_function()

存储比较运算符以清理代码,例如:

^{pr2}$

所以,尽管如此,我从来没有遇到过任何东西,如果我真的想把它作为变量存储,我想知道是否真的有什么限制?在


Tags: 对象lambda字符串答案文档列表规则var
3条回答

在Python中,不能真正将表达式和语句存储为对象。在

当然,可以将表达式包装在lambda中,也可以将一系列语句包装在代码对象或可调用对象中,但无法轻松操作它们。例如,将加法的所有实例改为乘法是不容易的。在

在某种程度上,这可以通过ast模块来解决,该模块提供了将Python代码解析为抽象语法树的功能。然后可以操作树,而不是代码本身,并将其传递给compile(),将其转换回代码对象。在

然而,这是一种间接寻址的形式,补偿了Python本身所缺少的特性。ast无法与Lisp宏的anythings-goes灵活性相比。在

不能在变量中存储语法结构。例如,你做不到

command = break

while condition:
    if other_condition:
        command

或者

^{pr2}$

根据Language Reference,赋值语句的右侧可以是“表达式列表”或“屈服表达式”。表达式列表是一个或多个表达式的逗号分隔列表。您需要通过更多的标记来实现任何具体的东西,但最终您可以发现“expression”是任意数量的对象(文本或变量名,或者是将一元运算符(如not~或{}应用到嵌套表达式列表)的任意数量的对象(如文本或变量名),或者将一元运算符(如not~-应用到嵌套表达式列表)的结果算术、比较或按位运算符,或逻辑andor)或三元{}。在

您还可以在语言引用的其他部分注意到,“表达式”正是可以用作函数参数的内容,或者用作列表理解或生成器表达式的第一部分(在for之前)。在

这个是一个相当宽泛的定义——事实上,它相当于“Python解析为对象的任何东西”。{8}不是一个有效的表达式,因为它本身没有一个有效的表达式。类似地,大多数Python keywords不是表达式(例外是True、False和None,它们都是某些对象的规范名称)。在

特别要注意的是,函数也是对象,因此函数的名称(不调用它)是一个有效的表达式。这意味着你的例子:

var = lambda: some_function()

可以写成:

^{pr2}$

相关问题 更多 >