: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模块序列化数据

第二节:Python的变量常量

Python入门 第二节

零基础学Python后端开发篇 第二十二节--Python Web开发:HTTP请求的url路由

python学习第二节