Python中有任何声明关键字吗?

16 浏览
0 Comments

Python中有任何声明关键字吗?

这个问题已经在这里有了答案

在Python中是否有可能只声明变量而不赋值?

在Python中是否有声明关键字,如localglobalprivatepublic等?我知道Python中不指定变量类型; 但如何知道代码x = 5创建了一个新变量还是设置了一个现有变量?

admin 更改状态以发布 2023年5月23日
0
0 Comments

Python中一个重要的概念是,没有变量,只有 "名称"。

在你的例子中,你有一个对象 "5", 然后你创建了一个名字 "x",它引用了对象 "5"。

如果之后你执行:

x = "Some string"

那么这仍然是完全有效的,名字 "x" 现在指向了对象 "Some string"。

这不是一种类型冲突,因为名称本身没有类型,只有对象有类型。

如果你尝试执行 x = 5 + "Some string",你会得到一个类型错误,因为你不能将两个不兼容的类型相加。

换句话说,Python对象是强类型的,它不是没有类型的。

这里有一些关于Python类型的非常好的讨论:

编辑:为了完整地回答你的问题,一个名称可以引用一个现有的对象或一个新的对象。

# Create a new int object
>>> x = 500
# Another name to same object
>>> y = x
# Create another new int object    
>>> x = 600
# y still references original object
>>> print y
500
# This doesn't update x, it creates a new object and x becomes
# a reference to the new int object (which is int because that
# is the defined result of adding to int objects).
>>> x = x + y
>>> print x
1100
# Make original int object 500 go away
>>> del y

编辑2:有关可变对象(可以更改)和不可变对象(不能更改)之间差异的最完整讨论,请参阅Python数据模型的官方文档。

0
0 Comments

我真的很喜欢 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 代码中,静态类型检查并没有什么好处。变量的寿命如此之短,以至于我必须彻底醉醺才能做错事情……并且编译器还会通过指出类型错误来拯救我。

0