在Python中,所有的文字值都会导致对象的创建

2024-10-08 19:26:09 发布

您现在位置:Python中文网/ 问答频道 /正文

这意味着什么“在Python中,所有的文字值都会导致对象的创建”?在

我在学习Python,从这里得到一句话: http://python4java.necaiseweb.org/Fundamentals/FunctionsAndMethods

但我真的不明白它的意思。在

首先,什么是“字面值”?在

第二,请解释这句话。在

如果你能举出一些例子,那会很有帮助的!在


Tags: 对象orghttp例子fundamentals文字面值functionsandmethods
3条回答

这意味着,当您键入123467.2、或{}之类的任何值时,它都被当作对象处理。在

以下是文字值的示例

>>> 0
0
>>> 'a'
'a'
>>> 1.9
1.9
>>> 'foo'
'foo'

一切都是一个对象,甚至是ints,如下所示,您可以看到0的方法:

^{pr2}$

如果我想我可以打电话给:

>>> (-1).__abs__() # abs(-1) is better but this is just to show it's an object
1

Python实际上在不同的上下文中对“literal”有一些定义,但是如果您只想了解基本概念:像123这样的数字和"abc"这样的字符串是文本,而像{}这样的表达式则不是。在

在Java中,当您编写123时,它不是对Java对象的引用,而是一个“本机”整数。在Python中,它是对Python对象的引用。在

因为在Python中,所有的东西都是一个对象,一个整数有方法,可以被卡在集合中,等等。如果我想将123粘贴到列表中,我只需这样做:

>>> my_list = list()
>>> my_list.append(123)
>>> my_list
[123]

如果我想使用列表中的值作为整数,我只需这样做:

^{pr2}$

因此,我可以像其他对象一样使用文字来编写列表显示:

>>> my_other_list = [my_list, 2]

(不要问列表显示是否也是字面意思,因为这是“不同上下文的不同定义”真正重要的时候…)


值得指出的是,“所有的文字值都会导致对象的创建”,这并不是真的。一个文本可能是一个新对象,但它也可能是对具有相同值的现有对象的引用。例如:

>>> a = 3
>>> b = 3
>>> a is b
True
>>> id(a) == id(b)
True

(语言并不能保证这一点是正确的,但大多数Python实现通常都是这样。)

因此,b = 3并没有创建一个对象,而只是对a = 3中相同对象的另一个引用。(事实上,3很可能在查看代码之前就已经被解释器预构建和预缓存了。)

但是您不需要关心这个问题,因为3是不可变的。不管你得到的是相同的3对象还是不同的对象,因为除了is和{},没有办法区分它们的区别。字符串、浮点数等也是如此

相关问题 更多 >

    热门问题