gpt4 book ai didi

python - python 中的作用域和类型规则

转载 作者:太空宇宙 更新时间:2023-11-03 12:20:52 27 4
gpt4 key购买 nike

我是 python 编程的初学者,我编写了以下程序以试图理解作用域和类型规则。

  a = 5                                                                                                                                                                                                 
print(a)
a = "Hello World"
print(a)

我得到以下输出。

  5
Hello World

我知道变量是在 python 中动态输入的。当 a=5 分配发生时,解释器理解 'a' 是一个整数。为什么同一个变量赋字符串值不报错

最佳答案

Python 中的变量没有类型。它们只是值(value)观的名称。当然,这些值确实有类型,但变量并不关心。正如“约翰”在一次谈话中可以是一个男人的名字,或者在另一次谈话中是一只 Poodle 的名字一样,a可以是 int 的名称在你程序的一部分和一个str在另一部分。


这是 Python 中的变量与您可能来自的任何语言之间更大差异的一部分。

在 C++ 中,变量实际上定义了内存中值可以存在的位置。例如,int变量有 4 个字节的内存,当你写 a = 42 ,它将数字 42 复制到这 4 个字节中。

在 Python 中,变量只是定义了一个值的引用,该值在堆的某处有自己的生命周期。当然,值的存储仍然必须有一个类型,但变量不是值的存储。

(如果 C++ 确实是您最熟悉的语言,那么将每个 Python 变量视为类型 std::shared_ptr<boost::any> 可能会有所帮助。)


在某些程序中,能够为不同类型重用变量名是很有用的,但在其他程序中,这更有可能是错误而不是故意的。有像 mypy 这样的静态分析器您可以使用它来检查此类错误。在大多数情况下,自动类型推断足以确定您希望变量成为什么类型,并确保您始终如一地使用该类型。如果不是,PEP 484 (这可能会成为 Python 3.5 的一部分,并且已经大部分由 mypy 处理)标准化了一种方法来帮助这些分析器,为它们提供显式类型提示。


最后一件事:如果您好奇它在幕后是如何工作的,在 Python 中,每个范围的命名空间只是一个字典。当你写 a = 5在模块全局级别,就像做 g['a'] = 5 , 其中g是模块的字典。局部变量和闭包有一些棘手的地方,但基本上,这是变量如何工作的关键。

关于python - python 中的作用域和类型规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30148453/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com