2024-10-08 19:26:09 发布
网友
这意味着什么“在Python中,所有的文字值都会导致对象的创建”?在
我在学习Python,从这里得到一句话: http://python4java.necaiseweb.org/Fundamentals/FunctionsAndMethods
但我真的不明白它的意思。在
首先,什么是“字面值”?在
第二,请解释这句话。在
如果你能举出一些例子,那会很有帮助的!在
这意味着,当您键入1234、67.2、或{}之类的任何值时,它都被当作对象处理。在
1234
67.2
以下是文字值的示例
>>> 0 0 >>> 'a' 'a' >>> 1.9 1.9 >>> 'foo' 'foo'
一切都是一个对象,甚至是ints,如下所示,您可以看到0的方法:
int
0
如果我想我可以打电话给:
>>> (-1).__abs__() # abs(-1) is better but this is just to show it's an object 1
Python实际上在不同的上下文中对“literal”有一些定义,但是如果您只想了解基本概念:像123这样的数字和"abc"这样的字符串是文本,而像{}这样的表达式则不是。在
123
"abc"
在Java中,当您编写123时,它不是对Java对象的引用,而是一个“本机”整数。在Python中,它是对Python对象的引用。在
因为在Python中,所有的东西都是一个对象,一个整数有方法,可以被卡在集合中,等等。如果我想将123粘贴到列表中,我只需这样做:
>>> my_list = list() >>> my_list.append(123) >>> my_list [123]
如果我想使用列表中的值作为整数,我只需这样做:
因此,我可以像其他对象一样使用文字来编写列表显示:
>>> 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很可能在查看代码之前就已经被解释器预构建和预缓存了。)
b = 3
a = 3
3
但是您不需要关心这个问题,因为3是不可变的。不管你得到的是相同的3对象还是不同的对象,因为除了is和{},没有办法区分它们的区别。字符串、浮点数等也是如此
is
这意味着,当您键入}之类的任何值时,它都被当作对象处理。在
1234
、67.2
、或{以下是文字值的示例
一切都是一个对象,甚至是
^{pr2}$int
s,如下所示,您可以看到0
的方法:如果我想我可以打电话给:
Python实际上在不同的上下文中对“literal”有一些定义,但是如果您只想了解基本概念:像}这样的表达式则不是。在
123
这样的数字和"abc"
这样的字符串是文本,而像{在Java中,当您编写
123
时,它不是对Java对象的引用,而是一个“本机”整数。在Python中,它是对Python对象的引用。在因为在Python中,所有的东西都是一个对象,一个整数有方法,可以被卡在集合中,等等。如果我想将
123
粘贴到列表中,我只需这样做:如果我想使用列表中的值作为整数,我只需这样做:
^{pr2}$因此,我可以像其他对象一样使用文字来编写列表显示:
(不要问列表显示是否也是字面意思,因为这是“不同上下文的不同定义”真正重要的时候…)
值得指出的是,“所有的文字值都会导致对象的创建”,这并不是真的。一个文本可能是一个新对象,但它也可能是对具有相同值的现有对象的引用。例如:
(语言并不能保证这一点是正确的,但大多数Python实现通常都是这样。)
因此,
b = 3
并没有创建一个对象,而只是对a = 3
中相同对象的另一个引用。(事实上,3
很可能在查看代码之前就已经被解释器预构建和预缓存了。)但是您不需要关心这个问题,因为},没有办法区分它们的区别。字符串、浮点数等也是如此
3
是不可变的。不管你得到的是相同的3
对象还是不同的对象,因为除了is
和{相关问题 更多 >
编程相关推荐