:Python项目组织结构-第二节:模块内置变量
Posted 快乐江湖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了:Python项目组织结构-第二节:模块内置变量相关的知识,希望对你有一定的参考价值。
文章目录
一:模块内置变量
(1)含义及作用
在Python中变量有两类,一类由用户定义,另一类叫做内置变量,调用dir()函数会返回一个列表,里面包含了所有内置变量和所有自定义变量
a = 1
b = 2
c = 3
test = dir()
print(test)
####################结果####################
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__',
'__spec__', 'a', 'b', 'c']
为了区分,内置变量会以__[]__
的形式命名,这些内置变量有其特殊的意义,我们可以挑选一些重点变量打印一下
- 他们的含义这里就不多解释了,应该可以看明白
需要额外注意一点,dir()
函数也可以传入参数,参数是一个模块,它将会返回该模块内的所有变量
import sys # 系统内置系统模块
display = dir(sys)
print(display)
################# 结果 ##########################
['__breakpointhook__', '__displayhook__', '__doc__', '__excepthook__', '__interactivehook__', '__loader__',
'__name__', '__package__', '__spec__', '__stderr__', '__stdin__',
'__stdout__', '__unraisablehook__', '_base_executable', '_clear_type_cache', '_current_frames',
'_debugmallocstats', '_enablelegacywindowsfsencoding', '_framework', '_getframe', '_git', '_home',
'_xoptions', 'addaudithook', 'api_version', 'argv', 'audit',
'base_exec_prefix', 'base_prefix', 'breakpointhook', 'builtin_module_names', 'byteorder', 'call_tracing',
'callstats', 'copyright', 'displayhook', 'dllhandle', 'dont_write_bytecode', 'exc_info',
'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'float_repr_style',
'get_asyncgen_hooks', 'get_coroutine_origin_tracking_depth', 'getallocatedblocks', 'getcheckinterval', 'getdefaultencoding',
'getfilesystemencodeerrors', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof',
'getswitchinterval', 'gettrace', 'getwindowsversion', 'hash_info', 'hexversion', 'implementation',
'int_info', 'intern', 'is_finalizing', 'maxsize', 'maxunicode',
'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache',
'platform', 'prefix', 'pycache_prefix', 'set_asyncgen_hooks', 'set_coroutine_origin_tracking_depth', 'setcheckinterval',
'setprofile', 'setrecursionlimit', 'setswitchinterval', 'settrace', 'stderr', 'stdin', 'stdout',
'thread_info', 'unraisablehook', 'version', 'version_info', 'warnoptions', 'winver']
(2)入口文件
下面对比两种情形
- 情况1:在
one.p1
中打印内置变量__name__
和__file__
,然后在test
中导入one.p1
并运行 - 情况2:在
test
中打印内置变量__name__
和__file__
,然后直接运行
结果如下
# 情况1
name:one.p1
file:E:\\Postgraduate\\Python study\\one\\p1.py
# 情况2
name:__main__
file:E:/Postgraduate/Python study/test.py
可以发现在情况1中,p1
被执行时是以模块的方式导入的;在情况2中,test
是被直接执行的,因此test.py
就叫做入口文件
(3)__name__的应用
Python中模块被导入时其中的语句是会自动执行的,因此这就产生了一个问题——如何区分这个模块是直接被执行的还是说它是被导入后才被执行?
因此,在Python中就会有如下非常经典的语句
if __name__ == '__main__'
print("这是入口文件")
else
print("这是导入")
二:相对导入和绝对导入
(1)经典Python项目组织结构
在前面的叙述中,大家可能觉得模块的导入并没有什么难理解的,这是因为我们现在所接触的都是很简单的情况。在大型Python项目中,模块的导入是很复杂的,如果不能准确了解,很可能导致你连代码都读不下去
一般来说,常规的Python项目组织结构如下,其中main.py
作为入口文件
需要注意,在上面展示的目录结构中,模块最顶级的包并不是Python study
,而是由入口文件决定的,和入口文件平级的就是顶级包
(2)相对导入和绝对导入
绝对导入: 从顶级包开始逐级寻找模块的导入方式
- 一定要判别清楚哪一个才是真正的顶级包
import module1.p1
相对导入: 和相对路径类似,用.
代表当前目录、用..
代表上一级目录
以上是关于:Python项目组织结构-第二节:模块内置变量的主要内容,如果未能解决你的问题,请参考以下文章
《Python多人游戏项目实战》第二节 使用pickle模块序列化数据
《Python多人游戏项目实战》第二节 使用pickle模块序列化数据