我真的很喜欢 Van Gale 提供的理解,但它并没有真正回答“你怎么知道这个语句是创建一个新变量还是设置一个现有变量?”的问题?
如果您想知道在查看代码时如何识别它,您只需查找以前的作业。避免使用全局变量,这无论如何都是一个好习惯,你会做好准备的。
以编程方式,您可以尝试引用该变量,并查看是否出现“名称错误”异常
try:
x
except NameError:
# x doesn't exist, do something
else:
# x exists, do something else
我从来不需要这样做......我怀疑你是否真的需要这样做。
肥皂盒警报!!!
尽管对于习惯于一遍又一遍地输入类名(或类型)的人来说,Python 看起来有点松散……但它实际上完全符合您的要求。
如果你想要严格的类型,你会明确地这样做:
assert(isinstance(variable, type))
装饰器的存在是为了以一种非常方便的方式进行函数调用...
不久之后,您可能会得出这样的结论:静态类型检查(在编译时)实际上并没有使您的代码变得更好。必须在所有地方都有冗余类型信息的成本只有一点点好处。
我目前正在使用 actionscript,并输入以下内容:
var win:ThingPicker = PopUpManager.createPopUp(fEmotionsButton,
ThingPicker, false) as ThingPicker;
在python中看起来像:
win = createPopup(parent, ThingPicker)
我可以看到,查看 actionscript 代码,静态类型检查根本没有任何好处。变量的生命周期如此之短,以至于我必须完全喝醉才能用它做错事......并让编译器通过指出类型错误来拯救我。