python程序开发模块化_python-17-Python文件两种用途、模块化程序开发
--------------------------------python文件的两种用途----------------------------------
py文件的两种用途:
1、直接运行
print(__name__)
当文件被当作脚本直接执行时,__name__值为"__main__"
2、被当作模块导入
print(__name__)
当文件被当作模块导入时,__name__值为"模块名"
if __name__ == '__main__':
print("文件被当作脚本执行时要做的事情")
f1()
f2()
----------------------------------模块的搜索所路径与查找优先级----------------------------------
一:模块的搜索路径与查找优先级
(1) 先从内存中已经导入的模块里找
import mmm
mmm.f1()
import time
time.sleep(15)
print('='*50)
import mmm
mmm.f1()
(2) 然后再查找内置的模块
查看解释器内置的模块
import sys
print(sys.modules)
查看解释器的环境变量
import sys
print(sys.path)
当前执行文件所在的文件夹
import logging
print(logging)
(3) 最后去sys.path列表中存放的多个文件夹里依次检索
append方式是临时加一个python的环境变量
示例1:
import sys
print(sys.path)
sys.path.append(r'D:\python全栈15期\aaa\bbb')
import ccc
ccc.f1()
示例2:
import sys
print(sys.path)
import aaa.bbb.ccc as c
c.f1()
from aaa.bbb import ccc
ccc.f1()
主文件 是程序执行的入口
最先从 当前执行程序所在的文件夹下面找,也即从 内存开始找, 优先级最高
划分文件是为了方便管理
运行时 这些划分出去的文件,都是在主文件中运行的
后续文件 所参考的环境变量 都参考主文件所在的文件路径
所及需要手动添加整个项目的根目录路径,以便能找到 项目中下属的所有文件
----------------------------------避免循环导入(涉及递归调用)----------------------------------
破坏 循环导入(循环导入:互相等待对方手中的资源):一方先主动给出自己手中的值
如此便需要调整 本模块中的值 和调用语句之间的顺序
最佳解决方案: 涉及循环导入的 ,把导入语句放到函数中取
因为在外部调用函数时,调用模块中的所有名字都已经完成了赋值,可以直接取用
m1.py文件代码-------------
print('正在导入m1')
def f1():
from m2 import y
print(x,y)
x='m1'
m2.py文件代码--------------
print('正在导入m2')
def f2():
from m1 import x
print(x,y)
y='m2'
run.py文件代码------------
x=1
# import m1
# print(m1.x)
# print(m1.y)
# m1.f1()
import m2
m2.f2()
----------------------------------------模块化程序开发--------------------------------------
package(包) 其实就是文件夹
压缩包和文件的作用一样,都能用来存放文件
查看解释器的环境变量
import sys
print(sys.path)
# ['E:\\workplace_python', 'E:\\workplace_python', 'E:\\ruanjian\\Python\\Python36\\python36.zip', 'E:\\ruanjian\\Python\\Python36\\DLLs', 'E:\\ruanjian\\Python\\Python36\\lib', 'E:\\ruanjian\\Python\\Python36', 'E:\\ruanjian\\Python\\Python36\\lib\\site-packages']
# 工作台的路径 也被自动加入到python路径中
用户名写到 环境变量,在程序的任何位置都能使用
python中的两大环境变量
sys.path:到模块
os.environ 【这其实是一个字典】 存储想要给全局看的数据,在程序的任何位置都能看到 比如 用户名这种信息
拓展:
windows系统中的环境变量:在window系统中,全局有效,快速找值
python中的环境变量:在python程序中,全局生效,快速找值
获取当前 文件/文件夹 所在的文件夹的路径
import os
__file__ 当前文件的路径(带文件名)
print(__file__) # D:\python全栈15期\day17\ATM\conf\settings.py
BASE_DIR = os.path.dirname(os.path.dirname(__file__)) # D:\python全栈15期\day17\ATM\
# 获取当前 文件/文件夹 所在的文件夹的路径
导入模块的两种方式及其区别:
1、import xxx
在当前路径下 (查找)导入 xxx
2、from xxx import xxx
在当前路径下 从 xxx文件夹 (查找)导入xxxx
强调:被调用文件 在未明确指明路径的情况下,使用的路径 参照的都是 主文件的路径
日志使用:
每执行一个操作,都调用了记录日志的方法,将进行的操作行为,写入日志
-----------------------------------补充----------------------------------
名称空间相关强调:
定义的时候 名称空间中 就已经有这个名字(变量名、函数名等各种名字)了,顺序执行程序的时候才为这些 名字依次赋值
(只有被赋值的名字才能被使用。没有被赋值的名字不能被使用,否则程序报错)
扫描语法 中的主要做法:只扫描目标空间中有没有这个名字
执行过程 中的主要做法:若这些用到的名字 没有被赋值,则使用时报错
C语言中的变量机制 与 python中的变量机制有很大不同,要区别看待,不可进行相同处理
python中重视 绑定 , 即 名 和 值 放在不同的内存空间中,通过绑定起来进行取值
全局名称空间 其实也就是 文件级的名称空间(一个.py文件执行时,创建一个自己的全局名称空间)
程序中只有一个内置的名字空间
在它之下可有多个全局名字空间
平衡 ,以XXX换XXX,时间换空间、复杂性与效率性
文件路径(文件所在的路径,带自己的名字)
文件夹路径(文件/文件夹 本身所在的文件夹的路径,不带自己的名字)
import os : os是 程序 与 操作系统 交互的模块
调用操作系统os提供的功能
import sys: sys是 程序 与 解释器 交互的模块
调用python解释器提供的功能
python程序开发模块化_python-17-Python文件两种用途、模块化程序开发相关推荐
- php 公众号打开小程序,微信公众号图文消息新增两种进入小程序的方式
终于不再是凌晨--就在刚刚,微信宣布小程序的能力再次升级.除了添加小程序卡片外,公众号图文消息新增两种进入小程序的方式:支持通过蓝色文字链接或图片链接跳转到小程序. 1.推送形式更多样 公众号运营者在 ...
- python画素描画_Python素描画的两种程序解析
用python画素描画方式有多种,这里给大家分享常见的且操作简单的两种实现方式,一种用pillow库,一种用opencv库,这两个库的具体使用可百度,网上很多教程,这里不再赘述. 一.pillow实现 ...
- python字符串成熟编码_python字符串转公式两种方法获取网页编码python版
在web开发的时候我们经常会遇到网页抓取和分析,各种语言都可以完成这个功能.我喜欢用python实现,因为python提供了很多成熟的模块,可以很方便的实现网页抓取. 但是在抓取过程中会遇到编码的问题 ...
- python安装gdal包_python安装gdal的两种方法
1.不用手动下载文件,直接执行以下命令即可 conda install gdal 2.首先,下载gdal的whl文件 链接, 官网下载比较慢,GDAL-2.2.4-cp27-cp27m-win_am ...
- python 并发执行命令_python: 多线程实现的两种方式及让多条命令并发执行
一 概念介绍 Thread 是threading模块中最重要的类之一,可以使用它来创建线程.有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法:另一种是创建一个threading. ...
- python opencv 裁剪图片_Python图片裁剪的两种方式——Pillow和OpenCV
在这篇文章里我们聊一下Python实现图片裁剪的两种方式,一种利用了Pillow,还有一种利用了OpenCV.两种方式都需要简单的几行代码,这可能也就是现在Python那么流行的原因吧. OpenCV ...
- python-模块入门二(模块循环导入,区分python文件的两种用途,模块搜索路径,软件开发的目录规范)...
一.模块的循环导入问题 run.py # import m1 # 第一次导入 m1.py # 错误示范 ''' print('正在导入m1') from m2 import y #第一次导入m2 x= ...
- python import sql脚本_13-模块介绍-import两种方式-py文件的两种用途-模块搜索路径-项目开发的目录规范...
1.模块的介绍与使用模块import 1.1.模块的介绍 1.1.1.什么是模块? 模块就是一组功能的集合体,我们的程序可以导入模块来复用模块里的功能.在python中,模块的使用方式都是一样的,但其 ...
- 模块的四种形式 模块的调用 循环导入问题 模块的搜索路径 py文件的两种用途 编译python文件 包...
目录 模块的四种形式 什么是模块 模块的四种形式 自定义模块 第三方模块 内置模块 包 使用模块的好处 模块的调用 循环导入问题 模块的搜索路径 py文件的两种用途 编译python文件 包 什么是包 ...
最新文章
- 在C语言中break语句称为,在C语言中,break语句的功能是退出函数
- 身份证校验原理和PHP实现
- 做个游戏:设计代码生成特定的调用堆栈
- 以下python语言关键字在异常处理_【单选题】以下 Python 语言关键字在异常处理结构中用来捕获特定类型异常的选项是: ( )...
- 如何分析常见的TCP问题?
- Visual Studio Code打开项目
- C++ typedef小结(转载)
- Bind variables in 'in' condition(在in中动态的绑定参数(参数个数可变))
- 计算机应用水平考试dream,2016年职称计算机Dreamwaver使用教程:操作环境
- javaWeb基于SSM框架学生信息管理系统项目完整源码附带部署教程
- 数据仓库之元数据管理
- WinPcap vs Npcap
- C#条形码图像生成库
- 在Excel如何根据内容自动调整行高列宽
- 下一个大危机,会是什么?
- android 支付sdk ----libPaySdk
- katago安装使用
- swagger添加权限验证,swagger安全控制
- 本地的registry图形化界面harbor安装与使用--02
- 软件测试项目管理系统(STM)