第四章: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

相对导入: 和相对路径类似,用.代表当前目录、用..代表上一级目录

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐江湖

创作不易,感谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值