当前位置: 首页 > 知识库问答 >
问题:

python中的全局关键字:为什么、声誉和实际用途?[副本]

费朗
2023-03-14

我不是Python的早期切入(自上个版本以来使用它)。我非常渴望学习基础概念,我的最终目标是最终解剖和解决这个问题,所以我希望以下是一个精神上要求很高的问题:

我已经完成了我的工作(由于我正在开发的一些个人项目):我已经读了这个,这个,还有这个和“每一个”关于python中全局关键字的博客文章(像这样)。

然而,我的想法如下:

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

2) 关于它的声誉和使用它时可能发生的变量冲突,在我看来,这是显式优于隐式的一个明显例子。

全球x-

3) 在我的项目中,我需要迭代一个数据结构(比如dataframe),对每一行应用一个函数并填充另一行(比如另一个np.array)——填充的数组必须在函数外部,否则每次调用函数时我都会初始化它。出于我的目的,使用global关键字完全有意义,因此每次处理一行时,我都会告诉解释器以及函数使用该全局变量。我不认为还有比这更有意义的架构,使用“全局关键字含义”的核心目的?为什么不呢?

显然,我会为变量指定一个不会与其他可能变量发生冲突的名称。

所有的解释都很受欢迎。真的很感激。

编辑:

感谢@DYZ的参考,他们详细阐述了这个概念。所以,我的收获是:

1)很明显,全局变量“可能”是有害的,并导致坏代码,因为它的核心属性(意大利面条代码的副作用)。然而,当意识完成时,它们的使用可以被鼓励用于简单性或其他相关目的(这是我第一次读到支持其核心开发目的的东西?)。

共有1个答案

文增
2023-03-14

函数中使用global关键字将变量声明为全局变量,从而可以在脚本中的任何位置访问。但是,如果可能的话,应该尽量避免。

foo():
     global x
     x = 5
foo()
print(x)

控制台将打印5。如果您没有将x声明为全局,它将不会。它们只能用于常量:

pi = 3.14
foo():
     pi = 1
     global pi
     print(pi)
foo()

这将打印3.14。

 类似资料:
  • 我们可以编写包含或不包含的代码,如下所示。 或 的实际用途是什么?。这是内存效率更高还是可读性更强?

  • 我最近更新了Android studio到3.0版本。现在,在中,所有依赖项都是使用关键字而不是旧的关键字添加的。 但是关键字仍然有效。和有什么区别?

  • 问题内容: ECMAScript 6中引入的数据结构的实际用途是什么? 由于弱映射的键会对其对应的值建立强引用,因此确保只要弱键仍处于活动状态,插入到弱映射中的值就 永远不会 消失,因此不能将其用于备忘录表,缓存或通常使用弱引用,具有弱值的映射等的其他任何内容。 在我看来,这是: …只是一种回旋的说法: 我缺少哪些具体用例? 问题答案: 从根本上 WeakMaps提供了一种从外部扩展对象而不干扰垃

  • ECMAScript 6中引入的数据结构的实际用途是什么? 由于弱映射的键创建对其对应值的强引用,确保插入到弱映射中的值在其键仍处于活动状态时永远不会消失,因此它不能用于备注表、缓存或您通常使用弱引用、具有弱值的映射等的任何其他内容。 在我看来: …只是一种迂回的说法: 我缺少哪些具体的用例?

  • 问题内容: 在Java中,接口的任何使用都由抽象类实现。我知道接口的一个优点是,如果我们实现一个接口,那么我们也可以扩展另一个类。Java接口还有其他用途或优点吗? 问题答案: 您喜欢什么:在一个Abstract类中成千上万个抽象方法并继承该类,或者为特定的抽象方法创建尽可能多的接口,并通过继承所需的任意数量的接口来仅使用您想要的那些方法… 因此,仅通过继承特定接口使用该方法即可,如果您要继承类,

  • 今天在课堂上,我的老师告诉我,我不应该在python中使用全局变量,因为函数应该能够独立存在。我想我可以通过参数和返回值来实现这一点?任何帮助都会很好,谢谢。