首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中有声明关键字吗?

Python中有声明关键字吗?
EN

Stack Overflow用户
提问于 2009-02-20 22:34:34
回答 5查看 9.4K关注 0票数 11

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-02-21 00:21:28

我非常喜欢Van Gale提供的理解,但它并没有真正回答这样的问题:“你怎么知道这个语句:创建一个新变量还是设置一个现有变量?”

如果您想知道在查看代码时如何识别它,只需查找以前的赋值。避免使用全局变量,这是一个很好的实践,您将做好所有的准备。

以编程方式,您可以尝试引用该变量,并查看是否有“名称错误”异常。

代码语言:javascript
复制
try:
    x
except NameError:
    # x doesn't exist, do something
else:
    # x exists, do something else

我从来没必要这么做..。我怀疑你是否真的需要。

肥皂盒警报!

尽管Python看起来有点松懈,但对于那些习惯一遍又一遍地键入类名(或键入)的人来说.实际上,它就像你想要的那样严格。

如果您想要严格的类型,那么您应该明确地这样做:

代码语言:javascript
复制
assert(isinstance(variable, type))

装饰器的存在是为了方便函数调用.

不久,您可能就会得出这样的结论:静态类型检查(在编译时)实际上并不能使代码变得更好。在整个地方拥有冗余类型信息的成本只有很小的好处。

我目前在actionscript中工作,并键入以下内容:

代码语言:javascript
复制
var win:ThingPicker = PopUpManager.createPopUp(fEmotionsButton, 
       ThingPicker, false) as ThingPicker;

在python中如下所示:

代码语言:javascript
复制
win = createPopup(parent, ThingPicker)

我可以看到,看看actionscript代码,静态类型检查根本没有好处。这个变量的生命周期太短了,我必须完全喝醉才能做错事.并让编译器通过指出类型错误来保存我。

票数 15
EN

Stack Overflow用户

发布于 2009-02-20 22:46:25

关于Python,需要理解的一件重要事情是没有变量,只有“名称”。

在您的示例中,您有一个对象"5“,并且正在创建一个引用对象"5”的名称"x“。

如果以后你这样做了:

代码语言:javascript
复制
x = "Some string"

这仍然是完全正确的。名称"x“现在指向对象”一些字符串“。

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

如果您尝试x=5+“string”,您将得到一个类型错误,因为您不能添加两个不兼容的类型。

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

下面是关于Python输入的一些非常好的讨论:

  • 强输入与强测试
  • 类型:强与弱,静态与动态

编辑:要完成这个问题,名称可以引用一个现有的对象或一个新的对象。

代码语言:javascript
复制
# 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数据模型的正式文档中最完整地讨论可变对象(可以更改)和不可更改对象(不可更改的对象)之间的区别。

票数 14
EN

Stack Overflow用户

发布于 2009-02-20 23:09:54

值得一提的是,有一个全局关键字,所以如果您想要引用全局x:

代码语言:javascript
复制
x = 4
def foo():
    x = 7 # x is local to your function

你需要这样做:

代码语言:javascript
复制
x = 4
def foo():
    global x # let python know you want to use the top-level x
    x = 7
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/571514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档