我不是python的早期采用者(自从上一版开始就使用它)。我非常热衷于学习基本概念,而我的最终目标是最终剖析并解决这个概念,因此我希望以下是一个精神上要求很高的问题:
我已经完成了我的工作(由于我正在开发一些个人项目):我读过this,this,this和有关全球的博客文章python中的关键字(如this)。
但是,我的想法如下:
1) 由于某些原因,全局关键字必须存在。 ¿是什么原因将其包含在python核心中?
2)关于其声誉以及使用时可能出现的变量冲突,我认为,这是explicit is better than implicit.
的明显示例global x->解释器,当修改或使用变量x时,只需确保您使用的是全局变量而不创建本地变量(与nonlocal关键字相同)。 ¿我想了解它的不良声誉所缺少的是什么?
3)在我的项目中,我需要遍历数据结构(例如pandas数据框),对每行应用一个函数,然后填充另一行(例如另一个np.array)-< strong>填充的数组必须在函数之外,因为否则每次调用该函数时,我都会对其进行初始化。出于我的目的,使用global关键字是完全有意义的,因此每次我处理一行时,我都会告诉解释器,因此也要使用该全局变量的函数。我没有想到使用“全局关键字含义的核心目的”的另一种架构比这更有意义。 ¿为什么不呢?
很显然,我负责为变量分配一个名称,该名称不会与其他可能的名称发生冲突。
非常欢迎所有解释。真的很欣赏。
编辑:
感谢@DYZ提供参考,他们在这个概念上做了很多阐述。因此,我的主要收获是:
1 )很明显,全局变量由于其核心属性(意大利面条代码+副作用)“可能”损坏并导致错误代码。但是,在有意识的情况下,出于简单或其他相关目的,可以鼓励使用它们(这是我第一次阅读支持其“核心开发目的”的内容)。
答案 0 :(得分:0)
在函数内部使用global
关键字将变量声明为全局变量,从而可以在脚本中的任何位置进行访问。但是,应尽可能避免。
foo():
global x
x = 5
foo()
print(x)
控制台将打印5。如果您未将x声明为全局,则不会。它们仅应用于常量:
pi = 3.14
foo():
pi = 1
global pi
print(pi)
foo()
这将打印3.14。