python中的全局关键字:为什么,声誉和真正的使用?

时间:2018-12-10 23:28:34

标签: python pandas numpy global-variables

我不是python的早期采用者(自从上一版开始就使用它)。我非常热衷于学习基本概念,而我的最终目标是最终剖析并解决这个概念,因此我希望以下是一个精神上要求很高的问题:

我已经完成了我的工作(由于我正在开发一些个人项目):我读过thisthisthis和有关全球的博客文章python中的关键字(如this)。

但是,我的想法如下:

1) 由于某些原因,全局关键字必须存在。 ¿是什么原因将其包含在python核心中?

2)关于其声誉以及使用时可能出现的变量冲突,我认为,这是explicit is better than implicit.

的明显示例

global x->解释器,当修改或使用变量x时,只需确保您使用的是全局变量而不创建本地变量(与nonlocal关键字相同)。 ¿我想了解它的不良声誉所缺少的是什么?

3)在我的项目中,我需要遍历数据结构(例如pandas数据框),对每行应用一个函数,然后填充另一行(例如另一个np.array)-< strong>填充的数组必须在函数之外,因为否则每次调用该函数时,我都会对其进行初始化。出于我的目的,使用global关键字是完全有意义的,因此每次我处理一行时,我都会告诉解释器,因此也要使用该全局变量的函数。我没有想到使用“全局关键字含义的核心目的”的另一种架构比这更有意义。 ¿为什么不呢?

很显然,我负责为变量分配一个名称,该名称不会与其他可能的名称发生冲突。

非常欢迎所有解释。真的很欣赏。

编辑:

感谢@DYZ提供参考,他们在这个概念上做了很多阐述。因此,我的主要收获是:

1 )很明显,全局变量由于其核心属性(意大利面条代码+副作用)“可能”损坏并导致错误代码。但是,在有意识的情况下,出于简单或其他相关目的,可以鼓励使用它们(这是我第一次阅读支持其“核心开发目的”的内容)。

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。