python--导入,模块的引用,包,__name__

简介: python--导入,模块的引用,包,__name__

__name__


创建一个py文件,命名为 demo1.py,写下面一行代码

print(__name__)

执行

从当前文件下运行,__name__就是__main__

在创建一个文件为demo2.py,导入demo1,运行demo2.py

从demo2.py 里导入 demo1,__name__ 为导入的文件名

if __name__=='__main__':

上面这句话,当从当前文件执行的时候是True,从别的文件里执行为 False

if __name__ == '__main__':

    所有不需要调用就能执行的内容


导入


所有模块的导入,都相当于把要导入的模块中的代码放到被直接执行的文件下执行了

import 模块
导入这个模块之后 模块内的所有名字 就都可以通过模块来引用了
模块名.名字
from 模块 import 名字
导入这个模块中的某个名字之后,这个名字就可以直接使用了
名字是变量 直接用
名字是函数 函数名()就是调用
名字是类名 类名()就是实例化
模块的循环引用 - 不能
把模块当成脚本运行 :
    你希望 某一段代码 在被当做模块导入的时候 不要执行
    就把它写在 if __name__ == '__main__':下面
sys.path 一个自定义模块能否被导入,就看sys.path列表中有没有这个模块所在的绝对路径
import 模块名  # ModuleNotFoundError : No module named '模块名'
从包中导入模块,要注意这个包所在的目录是否在sys.path
如果是直接导入一个包,那么相当于执行了这个包中的__init__文件
并不会帮你把这个包下面的其他包以及py文件自动的导入到内存
如果你希望直接导入包之后,所有的这个包下面的其他包以及py文件都能直接通过包来引用
那么你要自己处理__init__文件


导入时的注意点


重新加载模块 已经导入的模块即便被修改在程序执行过程中也不会生效
from  import导入了什么 就能使用什么 不导入的变量 不能使用
当模块中导入的方法或者变量 和 本文件重名的时候,那么这个名字只代表最后一次对它赋值的哪个方法或者变量
在本文件中对全局变量的修改是完全不会影响到模块中的变量引用的(a.py文件导入了b.py文件里的name="zou",在a.py里写name=123,在执行b.name,还是zou)
__all__可以控制*导入的内容
import sys
import my_module
sys.modules   存储了所有导入的文件的名字和这个文件的内存地址
{'sys':文件的内存地址,
'my_module': my_module的地址
'__main__':当前直接执行文件所在的地址}
再使用反射自己模块中的内容的时候
import sys
getattr(sys.modules[__name__],变量名)


模块之间的调用


import my_module

导入一个模块发生了如下几件事

  1. 找到这个模块,开辟一块属于这个模块的命名空间
  2. 执行这个模块下的所有东西
  3. 把模块里的东西加载在内存里
  4. 模块名指向这个地址

模块的搜索路径全部存储在 sys.path 列表中

导入模块的顺序,是从前到后找到一个符合条件的模块就立即停止不在向后寻找

如果要导入的模块和当前执行的文件同级,直接导入即可。如果要导入的模块和当前执行的文件不同级,需要把要导入模块的绝对路径添加到 sys.path 列表中

项目根目录为PycharmProjects,下面有个zouzou的目录,zouzou目录下有个day1-day15的目录,day1-day15下分别有个day1和day5的目录,day1下面有个test.py的文件。day5 下有个test1.py的文件,里面有个test2的函数

在day1下面的test.py写下面的代码 ,红色字体为结果

import sys, os
print(__file__)  # 当前运行目录下的相对路径,因为PyCharm是从根目录下查找的D:/PycharmProjects/zouzou/day1-day15/day1/test.py
print(os.path.abspath(__file__))  # 当前文件的绝对路径D:\PycharmProjects\zouzou\day1 - day15\day1\test.py
print(os.path.dirname(os.path.abspath(__file__)))  # 返回当前文件的目录绝对路径D:\PycharmProjects\zouzou\day1-day15\day1
print(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
D:\PycharmProjects\zouzou\day1-day15
base_path=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(base_path)  # 将base_path加入到环境变量


模块的循环引用


在模块的导入中,不要产生循环引用问题,如果发生循环导入了就会发现明明写在这个模块中的方法,确显示找不到

还是上面的 demo1.py 和 demo2.py,分别写如下内容

demo1.py

import demo2
demo2.func()

demo2.py

import demo1
def func():
    print('in the demo2')

运行demo1时会报错



导入包,相当于执行了这个包下面的 __init__.py

# 如果这样导入了包下的policy,就要这样执行,点前面的都是包名,policy.py文件下有个get函数
import glance.api.policy
glance.api.policy.get()
import glance.api.policy as policy
policy.get()
from glance.api import policy
policy.get()

相关文章
|
6月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
781 7
|
6月前
|
监控 安全 程序员
Python日志模块配置:从print到logging的优雅升级指南
从 `print` 到 `logging` 是 Python 开发的必经之路。`print` 调试简单却难维护,日志混乱、无法分级、缺乏上下文;而 `logging` 支持级别控制、多输出、结构化记录,助力项目可维护性升级。本文详解痛点、优势、迁移方案与最佳实践,助你构建专业日志系统,让程序“有记忆”。
512 0
|
6月前
|
JSON 算法 API
Python中的json模块:从基础到进阶的实用指南
本文深入解析Python内置json模块的使用,涵盖序列化与反序列化核心函数、参数配置、中文处理、自定义对象转换及异常处理,并介绍性能优化与第三方库扩展,助你高效实现JSON数据交互。(238字)
571 4
|
6月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
666 0
|
6月前
|
XML JSON 数据处理
超越JSON:Python结构化数据处理模块全解析
本文深入解析Python中12个核心数据处理模块,涵盖csv、pandas、pickle、shelve、struct、configparser、xml、numpy、array、sqlite3和msgpack,覆盖表格处理、序列化、配置管理、科学计算等六大场景,结合真实案例与决策树,助你高效应对各类数据挑战。(238字)
815 0
|
Python
项目依赖的python包requirements.txt文件的生成与安装
项目依赖的python包requirements.txt文件的生成与安装
1709 0
|
Python Windows
Python分发包安装pip3
Python分发包安装pip3
326 0
|
Python
python集成包地址 Anaconda 一键安装拥有所有包
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34173549/article/details/82495040 点击进入官网下载https://www.
2973 0
python 获取当前项目引用的第三包(不是当前环境里面安装的所有安装包)
python 获取当前项目引用的第三包(不是当前环境里面安装的所有安装包)
|
Python
Python 3.8.8 几个常用库的下载和离线包的制作安装
Python 3.8.8 几个常用库的下载和离线包的制作安装
4864 0