Python全局变量关键字global的简单使用

摘要: 允许在函数内访问和修改全局变量。

简单来说,global告诉Python这个变量是全局的,而不是局部的。

项目示例:在一个项目中我使用global来修改函数中的全局变量如x=0,并在defmodify_x()中调用该函数:global x; x += 1 ,则x的值变为1
持续时间:这种用法已经至少有1 0年了。

数字:例如,我更改了全局变量 1 00 次,并且每次都使用它。

我仍然认为它有时会导致全局代码混乱,不建议频繁使用。
你自己掂量一下吧。

不要使用Python开发大型项目!

哈,这个话题挺深奥的。
上周,一位客户问我为什么不建议使用Python来开发大型项目,我告诉他以下内容。

首先,Python变量声明太灵活了。
虽然很简单,但是在大型项目中可能会让人头疼。
想想看,C语言有明确的类型、变量名和内存分配,而Python只是使用x =“data”。
后期维护的时候,如果不小心漏了注释或者变量名选得不好,就得一一修复代码的逻辑,非常麻烦。
另外,像拼写错误这样的小错误只有在 Python 出现问题时才会被发现。
如果使用C这样的静态类型语言,在编译阶段就可以发现问题,可以更早地解决问题。

我们来谈谈模块和依赖管理。
尽管Python模块导入很灵活,但它们很容易出现所谓的“依赖地狱”。
你想,一个大项目可能A依赖B,B依赖C,C又依赖A,那代码结构岂不是很乱?还有版本冲突。
例如,一个模块需要 numpy 版本 1 .2 0 或更高版本,但另一个模块需要 numpy 版本 1 .1 9 或更低版本。
我应该怎么办?虽然pip和conda可以帮助一点,但是仍然需要时间学习,并且不能彻底解决问题。

跨平台兼容性也是一个问题。
Python 环境的配置取决于语言环境。
在您的开发计算机上一切可能都很好,但是当您转到另一台设备时,可能会由于缺少依赖项或版本错误而出现问题。
另一方面,像Java这样的语言可以通过JVM“一次编写,到处运行”,更加简单。

关于性能,Python的GIL(全局解释器锁)是一个很大的陷阱。
虽然它保证了内存安全,但它限制了多线程性能,尤其是在 CPU 密集型任务上。
由于 GIL 争用,您的多线程使用可能会变慢。
虽然您可以使用多进程或异步编程来绕过 GIL,但这会增加代码复杂性。

最后,Python的同步和并行处理不如其他语言。
像 Go 语言这样的 Goroutines 和 Channel 更容易使用。

因此,虽然 Python 非常适合快速开发、脚本编写和中小型项目,但它对于大型和复杂项目有其缺点。
开发者需要根据项目需求、性能需求和技术栈进行权衡。
如果有必要,他们可以考虑混合开发,例如使用Python快速开发原型,然后使用C或Go重写性能关键模块。
无论如何,这取决于你,我认为这很实用。
我还在思考这个问题。

Python函数命名空间,作用域LEGB及Global详析

命名空间是变量的范围。
范围是变量的范围。

内置命名空间:加载解释器时创建。
包含int、float等,作用范围是整个程序。
使用 dir() 进行浏览。

全局命名空间:文件级别。
全局变量在这里声明。
使用 globals() 检查。

本地命名空间:在函数内部。
局部变量在这里声明。
与当地人核实()。
嵌套函数没有独立的命名空间,但有嵌套作用域。
LEGB 顺序:本地->外部->全局->内联。

x=1 00。
保护fn1 ():x+=1 打印(x)。
报告错误。
因为 x+=1 定义了局部 x 并屏蔽了全局 x。

全局x。
将点 x 设为全局变量。

x=1 00。
def fn1 (): 全局 x; x+=1 打印(x)。
报告错误。
因为先确定局部x,然后再使用全局x。

全局x。
它必须在外部和内部声明。

全局破坏了封装。
尽量不要使用它。
替换为非本地。