在__init__.py中定义任何变量

2024-04-24 13:13:42 发布

您现在位置:Python中文网/ 问答频道 /正文

在很多帖子中,我使用了__init__.py的情况,并使用它来定义全局变量就是其中之一。
但是我想知道在__init__.py中定义局部变量有什么缺点吗?在


Tags: py定义init情况帖子缺点局部变量全局变量
2条回答

使用全局变量通常有其问题:

  • 将变量作为参数传递给函数,例如比让函数访问全局变量更灵活和可读。

  • 在一个由连接的对象组成的网络中,对象的成员引用其他对象通常比它们使用全局变量访问其他对象更灵活。

  • 使用模块导出类而不是实例可以让您拥有一个类的多个实例,而不是一个实例。

话虽如此,我的经验是,在编程中没有教条。在算法设计中一个众所周知的引理是,从每一个资源(你的程序中的东西)可能有零,一个或无穷多。如果您通常只能有一个对象实例,并且它不更改标识,那么从模块导出实例(因此在modules_yuinit_uu.py中定义它)就可以了。在

只是在设计之初,你有时会假设某个资源是唯一的,但后来发现你会有多个。在

导出变量而不是类型的典型应用是当变量实际上是常量时。一个很好的例子是数学.pi,这种情况不会经常改变。。。在

注意,在Python中,所有的东西都是一个对象,所以这里可以互换使用单词“variable”和“instance”。除此之外,在Python中,函数和类本身就是(通常是单例)对象。在

没有技术上的原因可以阻止使用yu init_u.py来声明全局变量。在

尽管如此,\uu init_uu.py模块的意思是定义应用程序的导入结构。来自Python文档:

The __init__.py files are required to make Python treat the directories as containing packages; this is done to prevent directories with a common name, such as string, from unintentionally hiding valid modules that occur later on the module search path. In the simplest case, __init__.py can just be an empty file, but it can also execute initialization code for the package or set the __all__ variable, described later.

作为一名开发人员,我希望在一个u init_uu.py文件中找到应用程序本身的导入布局。这是我在探索源代码时最后要找的地方。在

因此,将您的实现隐藏在一个\uu init_Uu.py中是误导性的。对于全局变量尤其如此,因为根据定义,生命周期很难遵循。在

这被认为是一种不好的做法,因为它破坏了Python准则之一的代码可读性。在

import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
...
Readability counts.
...

相关问题 更多 >