当前位置:  开发笔记 > 编程语言 > 正文

Python中是否有任何声明关键字?

如何解决《Python中是否有任何声明关键字?》经验,为你挑选了4个好方法。

python中是否有任何声明关键字,如本地,全局,私有,公共等.我知道它是免费的类型但你怎么知道这句话:

x = 5;

创建一个新变量.

要么

设置现有的一个.

Jim Carroll.. 15

我非常喜欢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)

我可以看到,在动作脚本代码中,静态类型检查没有任何好处.变量的生命周期很短,以至于我必须完全醉了才能用它来做错误的事情......让编译器通过指出类型错误来保存我.



1> Jim Carroll..:

我非常喜欢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)

我可以看到,在动作脚本代码中,静态类型检查没有任何好处.变量的生命周期很短,以至于我必须完全醉了才能用它来做错误的事情......让编译器通过指出类型错误来保存我.



2> Van Gale..:

理解Python的一个重要事情是没有变量,只有"名称".

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

如果以后你做:

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数据模型的官方文档中对可变对象(可以更改)和不可变对象(无法更改)之间的区别进行最完整的讨论.


这些都是好点,但我想错过了这个问题.提问者想要确保它们不会覆盖现有对象(如javascript中的"var"语句).他们没有尝试分配类型.

3> Dana..:

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

x = 4
def foo():
    x = 7 # x is local to your function

你需要这样做:

x = 4
def foo():
    global x # let python know you want to use the top-level x
    x = 7



4> TM...:

它看起来不像提问者正在尝试分配一个类型,只是为了指定这是一个声明,而不是一个赋值.

看起来你正在寻找类似javascript的东西:

var x = 5;

javascript中声明关键字的概念是确保您在当前作用域中创建一个新对象,而不是简单地更改同名的其他变量.

Python不具备此功能.程序员必须确保他或她不会重新分配先前存在的名称.

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有