企业网站改版的好处,怎么做网站设,济南联通网站备案,购物网站哪个便宜一、内置全局变量__name__
在Python中#xff0c;有一些内置的全局变量和特殊变量#xff0c;它们是由Python解释器预定义的#xff0c;可以在代码的任何地方直接使用。
这些变量通常用于提供关于当前解释器状态的信息#xff0c;或者用于控制解释器的行为
在Python中有一些内置的全局变量和特殊变量它们是由Python解释器预定义的可以在代码的任何地方直接使用。
这些变量通常用于提供关于当前解释器状态的信息或者用于控制解释器的行为
在Python中__name__是一个内置的特殊变量也被称为“魔法变量”或“双下划线变量”
它并不是传统意义上的“全局变量”因为它不是由用户定义的而是由Python解释器自动为每个模块和脚本设置的
然而由于其作用范围是整个模块并且可以在模块中的任何地方访问所以有时会被非正式地称为“全局变量”在模块范围内
1.1 语法
if __name__ __main__ :
用来判断当前运行的脚本是否是主程序而不是被其他脚本导入的模块
1.2 作用
用来控制py文件在不同的应用场景执行不同的逻辑
1.3 __name__ 使用案例
if __name__ __main__ : 这行代码通常用于在脚本被直接运行时执行一些操作而在脚本被导入为模块时不执行这些操作
这样做的好处是你可以让你的Python文件既可以作为脚本直接运行执行一些特定的任务比如运行测试、作为程序的入口点等也可以作为模块被其他脚本导入提供函数、类和变量等
1、文件在当前程序执行即自己执行自己__name__ main
2、文件被当作模块被其他文件导入__name__ 模块名,下面的代码不会被显示出来
eg
# myscript.py def my_function(): print(Hello from my_function in myscript!) if __name__ __main__: # 这段代码只有在myscript.py被直接运行时才会执行 print(myscript.py is being run directly) my_function()
如果你直接运行 myscript.py 输出将是
myscript.py is being run directly
Hello from my_function in myscript!
但是如果你从另一个Python脚本中导入 myscript.py 比如
# another_script.py import myscript myscript.my_function()
然后运行another_script.py输出将是
Hello from my_function in myscript!
注意: 在 another_script.py 的执行过程中 myscript.py 中的 if __name__ __main__: 块没有执行因为 myscript.py 是被导入的而不是直接运行的
因此 myscript.py 中的print(myscript.py is being run directly) 语句没有打印出来 二、包
2.1 包的基础信息
含义包就是项目结构中的文件夹/目录
与普通文件夹的区别包是含有__init__.py 的文件夹
作用包就是将有联系的模块放到同一个文件夹下并且在这个文件夹中创建一个名字为
__init__ .py 文件那么这个文件夹就称之为包有效避免模块名称冲突问题让结构更清晰。
包的本质依然是模块包又可以包含包
2.2 包的应用
2.2.1 新建包
在Pycharm中新建包右键项目名 - new - Python Package
eg(汉化版): 2.2.2 导入包
注意
1、import 导入包时首先执行__init__.py 文件的代码
2、不建议在 __init__ 中编写Python模块尽量保证__init__ 的内容简单
导包方式一import pack_01
在Python中使用import语句来导入包或模块是一种基本且常见的做法。若你有一个名为pack_01的包并希望在你的Python脚本或交互式环境中使用它你可以按照以下方式导入
import pack_01
这条语句会告知Python解释器去搜索名为pack_01的包并将其内容加载到当前的命名空间中。但请注意这里所说的是“内容”实际上是指pack_01包下的__init__.py文件所定义的内容
若__init__.py为空或未定义任何类或函数等那么直接导入pack_01后你可能无法直接访问包内的其他模块或函数除非它们在__init__.py中被显式导入
若你希望在导入包后能够直接使用其内部的模块或函数你可以在__init__.py文件中添加相应的导入语句例如
# pack_01/__init__.py
from .module1 import function1
from .module2 import Class2
完成上述设置后当你执行import pack_01时function1和Class2将被导入你可以通过pack_01.function1()和pack_01.Class2() 的方式调用它们
导包方式二from pack_01 import fuction
如果你更习惯于直接访问包内的模块或函数而非通过包名作为前缀你还可以使用from ... import ...的语法来导入
from pack_01 import module1, module2
# 或者直接导入特定的函数或类
from pack_01.module1 import function1
在导入module1和module2后你可以直接通过module1.some_function() 和 module2.SomeClass() 来调用它们
而如果你导入了特定的函数或类如function1则可以直接使用 function1() 进行调用无需再通过模块名作为前缀
2.3 __all__
__all__ 变量一个列表可以控制要引入的东西模块、函数、类等
在Python中__all__ 是一个特殊的变量它是一个字符串列表用于定义当从包或模块中使用 from ... import * 语句时应该导入哪些名称模块、函数、类等
这个变量提供了一种方式来控制导入的命名空间避免导入不必要的或可能引发冲突的名称
当你在一个包的 __init__.py 文件或单独的模块文件中定义 __all__ 时你实际上是在告诉Python解释器“当有人尝试使用 from mypackage import * 或 from mymodule import * 时只应该导入这个列表中的名称。”
例如假设你有一个包 mypackage其结构如下
mypackage/ __init__.py module1.py module2.py
在 mypackage/__init__.py 文件中你可以定义 __all__ 来控制导入
# mypackage/__init__.py __all__ [module1, some_function] from .module1 import some_function
# 注意这里我们没有直接导入 module2因为它不在 __all__ 列表中
然后在另一个脚本中如果你尝试
from mypackage import *
这将只会导入 module1作为模块对象和 some_function从 module1 中导入的函数
注意由于 module2 没有在 __all__ 列表中它不会被导入
然而有一个重要的点需要注意__all__ 只影响 from ... import * 形式的导入。如果你显式地指定了要导入的名称__all__ 将不会有任何效果。例如
# 这将导入 module2即使它不在 __all__ 列表中
from mypackage import module2
今天的分享就到这里了欢迎大家一起交流讨论学习不当之处烦请大家指出~