3

如果没有明确的(类型)声明,我很难试图弄清楚事情是如何工作的——是否有一些好的规则/技巧可以让你更好地阅读 python 代码?谢谢!

4

4 回答 4

3

尽管这个问题给人的第一印象是,我认为它确实很聪明,因为它表明你潜意识里有一些东西应该让任何 Python 的开发者感兴趣,但如果没有被误解的话,我发现它通常被忽视,特别是在解释中.

我的意思是,作为 Python 基础的 IMO 非常奇特和智能:它是基于数据模型构思的。
在这个 Python 的数据模型中,没有“内容可以改变的内存块”意义上的变量,这与其他语言相反,并且在 Python 中我们不管理这种精确类型的变量。

更准确地说,Python 中的一切都是对象,每个对象都以标识符命名和设计,但在上述意义上,对象和标识符都不是“变量”。

这并不意味着在实现的深度中没有小盒子,即其他语言中所谓的变量,临时托管进出它们的值。

.

假设一个对象是用标识符设计的XYA2
我个人使用这种字母外观来指定任何标识符。标识符只不过是写在代码中的单词。它是出现在代码中的内容。
请注意,这个字母的外观是这个 stackoverflow.com 网站用来表示文本内的代码示例的,方法是单击按钮 {}。这很容易提醒。

现在,名称是真实对象,是位于计算机内存中的一组具体,以表示它所代表的所需概念值。 该集合是用 C 语言定义的,其中实现了 Python。 就个人而言,当我想指定一个对象时,我会加粗字母。 那么name的对象,对我来说,就是XYA2所指的XYA2


XYA2

标识符是XYA2
它链接到指向对象的底层且不可访问的指针。
这个链接是通过符号表完成的。通常,您会在 stackoverflow 或其他地方看到很少有对符号表的引用或暗示。但是,我认为这非常重要。

链接到标识符的指针指向XYA2对象XYA2
,所以,XYA2直接链接到指针,间接链接到对象。
我们不说“间接关联”,而是说“分配”。一个对象和它的标识符被相互分配给另一个,但是这个链接的媒介是底层的指针。

.

现在,有一些重要的事情。
严格来说,变量是“内容可以改变的内存块”。
我个人努力避免在其他意义上使用“变量”这个词。
问题是,由于在数学中使用了“变量”这个词,这个词经常被不加选择地使用,并且被许多开发者(不是全部)抛诸脑后,即使它是不合理的。
因此,几乎每个人都常用它来指定名称,也就是代码中的标识符。但这种做法非常令人困惑。应该小心避免。

也就是说,Python 中的对象不仅是某个类的实例,而且首先是一组具体的位;据我所知,从“内容可以改变的内存块”的意义上讲,它不是一个变量。
因此我认为 Python 中没有变量,因为我们可以访问和操作的唯一实体是标识符和对象。

然而,在执行的 Python 程序中,后台进程使用了​​大量的指针,据我所知,这些指针是严格意义上的实变量。
所以,从某种意义上来说,可以说我的断言“Python 中没有变量”是错误的。
这是一个观点问题。
作为 Python 的开发人员,从概念上讲,我不管理变量。当我考虑一个算法,我不认为指针级别,即使我知道它们存在并且知道它们存在非常重要。不是在变量级别,而是在 Python 数据级别模型,我不明白为什么我应该接受相信 Python 程序中存在变量。机器底层存在变量,

.

我为什么要写这一切?

1)
因为 Python 数据模型的性质会产生大量后果,如果不知道该数据模型,则无法理解这些后果。在这些后果中,有些很有趣,因为它们提供了难以置信的可能性,有些则是陷阱(一个众所周知的例子是:修改复制列表中的元素也会修改原始列表中的元素)。这就是为什么了解这个数据模型是最重要的。

为此,我建议您阅读文档的以下部分:对象值和类型
的 3.1命名和绑定的 4.1

.

2)
为了证明我对你的困惑的回答:不要为引擎盖下发生的事情而挣扎:
有一个垃圾收集器,一个引用计数器,底层字典类实体的货车,底层指针秘密中的雷鸣般的价值芭蕾,解释器进行的许多验证......当某些东西不适合时,会以异常消息的形式给出警告。

Python 控制了所有机器

您唯一需要考虑的是考虑您想要实现的算法,为此,了解数据模型至关重要。

欢迎来到 Python 世界


警告

我不认为自己是一个非常熟练的 Python 开发人员,我只是一个业余爱好者,在了解 Python 的一些基本知识之前遇到了很多问题。
以上所有描述都是我对Python数据模型的个人看法。如果此描述中的任何一点不正确,如果教学是通过发展论证完成的,我将很乐意了解更多有关它的信息。
但我强调这样一个事实,即这种对事物的看法使我能够理解并回答许多棘手的问题,并实现 Python 能够实现的一些棘手的机制。所以,在上面的描述中,一切都不能是假的。

于 2013-02-10T18:20:25.160 回答
2

您应该查看PEP8 文档这描述了 Python 格式和样式。

于 2013-02-10T16:16:41.730 回答
1

阅读 Duck Typing。Duck Typing 的目的之一是无论如何您都不应该过多地考虑某事的类型。您真正关心的是该变量可以按照您想要的方式使用。

在 Python 中,您不需要类型声明,因为您分配的名称只是一个指向对象的指针,而且它可以随时更改。

a = None
a = 1+5
a = my_function() # calls my function and assigns the return object to a
a = my_function # Assigns the function itself to a. You could actually pass it as a parameter
a = MyClass() # Runs the __init__() function of the class and assigns the return value to a
a = MyClass # Assigns the class itself to a.

这都是有效的 Python。你可以按顺序运行它,尽管改变类型是不受欢迎的,除非它完全清楚为什么。

于 2013-02-10T16:36:05.663 回答
0

如果您知道,c++11那么它与自动输入类似。

The variable type is decided on the bases of its assignment. 
于 2013-02-10T16:13:46.987 回答