【发布时间】:2020-03-06 23:49:23
【问题描述】:
我在 Python (3.7.6) 中偶然发现了一个有趣的现象。我想先说这样的命名变量是一个可怕的想法,永远不应该这样做。然而,下面的代码却惊人地编译:
list = (123, "abc", 222, "foo", "bar", 333); #Tuple named list
print(list);
但是:
list = (123, "abc", 222, "foo", "bar", 333);
list = list(list);
print(list);
由于元组不可调用而引发类型错误,并且可能它认为您正在尝试调用元组而不是将元组强制转换为列表。
当然,通过改变变量名如下:
a = (123, "abc", 222, "foo", "bar", 333);
a = list(a);
print(a);
一个人能够成功地将一个元组转换为一个列表。似乎这种行为存在于几个不同的关键字中。但是,对于某些关键字,这种行为是不可见的,例如 from。谁能解释这种疯狂?具体来说,什么样的关键字可以用作这样的变量,为什么一开始就允许这样做?
【问题讨论】:
-
这些都不是关键字。按定义关键字不能用作变量名。您可以使用
import keyword; print(keyword.kwlist)获取当前python 版本的关键字列表无论如何,list只是一个内置函数的名称,并且像任何其他变量一样,它可以重新分配,尽管它是高度不建议这样做。关键字的示例是class、in、for等,通常是语句的一部分。 -
顺便说一句,这完全是一个废话,我认为“演员”这个词并不是在 Python 中思考这些事情的有用方式。您将
tuple对象传递给list对象构造函数,该构造函数从tuple中创建一个新列表对象,因为list构造函数采用任意可迭代对象。 cast 一词带有来自低级静态类型语言(如 C 和 C++)的各种错误(在 Python 中)的含义。但我知道“cast”只是松散地用来表示“convert”
标签: python python-3.x