Python模块概念
补充:生成器表达式
将列表生成器的中括号改为小括号就是生成器表达式
res = [i for i in range(10) if i > 5] # 列表生成式
res = (i for i in range(10) if i >5) # 生成器表达式
模块
什么是模块
模块就是一系列功能的集合体(对函数集的封装)
模块的三种来源:
内置模块
第三方模块
自定义模块
为何要用模块
使用内置或者第三方的模块的好处是:拿来主义,极大提升开发效率
使用自定义的模块的好处是:将程序的各部分组件共用的功能提取出来放到一个模块中,其他的组件通过导入的方式使用该模块,该模块即自定义模块,好处是可以减少代码冗余。
如何使用模块
导入模块的三种方式:
import + 模块
首次倒入模块的会发生三件事:
会产生一个模块名称空间
会执行模块文件的内容,将产生的名字丢到模的名称空间里
在当前执行的文件中拿到一个名字(模块名),该名字指向模块的名称空间
模块的内功能的调用
module.func()
缺点:当模块名复杂(stu_ifo_msg)时,会大大降低开发效率。
from + 模块 + import + 函数名,函数名,函数名……
首次导入模块会发生3件事
会产生一个模块名称空间
会执行模块文件内容,见文件中产生的名字丢入到模块的名称空间中
在当前执行文件中拿到的函数名,该名字指向模块的名称空间中的函数
功能函数的调用
func()
缺点:当执行函数中有相同函数名时,会造成名称空间混淆
import + 模块 + as + 新名字 (推荐)
导入原理与第一种方式相同,不论模块名多长,模块内功能多少都能以最精简的方式写出清晰的代码(完美解决以上其他两种导入方式带来的缺陷)。
模块的查找路径(优先级从上到下)
内存
内置模块
sys.path(是以执行文件为准)
<!--当执行代码调用的模块中导入了另一个模块,它的sys.path任然是以当前执行代码的sys.path为准-->
如何区分python文件的两种用途
print(__ name __)
当文件被当做执行文件导入时__ name__ 的值为__ main__
当文件被当做模块被导入时__ name__的值为模块名
# 在模块内添加测试该模块的功能代码,但在执行文件中不能让其显示出来
def func1():
pass
def func2():
pass
def func3():
pass if __name__ == '__main__': # 当文件被当作模块导入时,__name__='模块名'
print('执行测试功能')
软件开发的目录规范
ATM
bin
start.py:启动文件
conf(配置文件,允许用户自定义)
settings.py
core(核心功能)
db:存放数据、账号信息等
src.py : 主程序,核心代码
lib(自定义模块)
common.py
log(日志文件)
Readme.txt(软件介绍)
transcation.tlo(用户日志和交易信息等)
start.py执行src.py中的功能,首先去bin中找,找不到,报错
①在sys.path中添加环境变量,但由于环境变量只针对于当前电脑,所以当程序在其他机器上使用时则无法执行,且只能运行src.py的功能,其他文件则无法执行。
② 一、将项目的根目录加到环境变量里
二、把项目根目录所在的局的对路径拿到,然后加到环境变量里
解决了只能运行src的缺陷,但是在另一台机器上任然不能使用。
③使用__ file __ 内置函数,print( __ file __ )<!--保险起见导入os模块中的os.path.abspath(__ file __)-->得到的是当前执行文件的路径(D:/……/ATM/bin/start.py),将此路径处理后根目录添加到环境变量中。
# os.path.dirname:获取上一层文件夹,os.path.abspath(__file__)得到的是当前执行文件的路径
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 最终我们需要的当前执行文件的根目录
sys.path.append(BASE_DIR) # 添加到环境变量中
为软件的提现功能添加日志功能并可以让用户自定义路径
软件的执行》》start.py》》scr.py(主程序,业务逻辑功能)》》提现功能下调用common.py中日志功能并记录到log文件夹下的transcation.log文件中,并将路径设置为可由用户自定义—调用conf文件夹下的setting.py的路径设置功能。
import os
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 当前执行文件下的根目录
LOG_PATH=r'%s\log\transcation.log' %BASE_DIR # 用户自定义
将start.py文件放入根目录下,所有需要添加环境变量的问题都迎刃而解,不需要绕着弯去添加环境变量。
Python模块概念的更多相关文章
- python 模块的概念介绍
模块 模块:本质就是一个.py文件分为三部分:内置模块.第三方模块,自定义模块 模块: 顶层文件 python模块python模块可以将代码量较大的程序分割成多个有组织的.彼此独立但又能互相交互的代码 ...
- python成长之路【第十八篇】:python模块介绍、模块导入和重载
一.模块和命名空间 一般来说,Python程序往往由多个模块文件构成,通过import语句连接在一起.每个模块文件是一个独立完备的变量包,即一个命名空间.一个模块文件不能看到其他文件定义的变量名,除非 ...
- 【转】python模块分析之unittest测试(五)
[转]python模块分析之unittest测试(五) 系列文章 python模块分析之random(一) python模块分析之hashlib加密(二) python模块分析之typing(三) p ...
- python 模块之-logging
python 模块logging import logging ### 简单使用格式 日志级别等级CRITICAL > ERROR > WARNING > INFO > ...
- Python深入:Distutils发布Python模块--转载
https://blog.csdn.net/gqtcgq/article/details/49255995 Distutils可以用来在Python环境中构建和安装额外的模块.新的模块可以是纯Pyth ...
- python模块大全
python模块大全2018年01月25日 13:38:55 mcj1314bb 阅读数:3049 pymatgen multidict yarl regex gvar tifffile jupyte ...
- python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheetahcherrypy:一个WEB frameworkctype ...
- Python模块(进阶3)
转载请标明出处: http://www.cnblogs.com/why168888/p/6411917.html 本文出自:[Edwin博客园] Python模块(进阶3) 1. python中模块和 ...
- Python模块、包、异常、文件(案例)
Python模块.包.异常.文件(案例) python.py #模块 # Python中的模块(Module),是一个Python文件,以.py文件结尾,包含了Python对象定义和Python语句, ...
随机推荐
- iOS蓝牙开发总结-4
蓝牙开发总结 只要熟悉蓝牙的流程,和蓝牙中每一个角色的作用,其实蓝牙通讯并没有想象中的难 1.蓝牙中心CBCentralManager:一般指得是iPhone手机 2.设备(外设)CBPeripher ...
- python 基础(九) 文件操作
文件操作 一.函数: f = open(’文件名','打开方式'[,encoding='字符编码']) open 打开的方式 字符 说明 r 只读的方式打开 rb 以二进制的形式打开文件 只读 r+ ...
- hdu6315( 2018 Multi-University Training Contest 2)
bryce1010模板 http://acm.hdu.edu.cn/showproblem.php?pid=6315 /*hdu 1007 首先我们在建立线段树之前应该思考的是线段树的节点维护一个什么 ...
- 最长上升子序列LIS(云笔记图片版)
- bat脚本启动Burp
我的burp点击之后并不会直接打开,需要用命令启动,所以在网上找了一下快捷启动的方法. ①新建一个文本文档,输入start javaw -jar “burp路径”, ②另存为***.bat,文件类型选 ...
- 转 SecureCRT中文乱码解决方法
1. 打开对话窗口,在工具栏中点开“选项”,选择“会话选项”. 2. 在打开的“会话选项”中,选择“外观”. 3. 在显示的“窗口和文本外观”中找到“字符编码”. 4. 把“字符编码”设置为“U ...
- Incorrect configuration: namenode address dfs.namenode.servicerpc-address or dfs.namenode.rpc-address is not configured.
在搭建Hadoop集群的时候,遇到了这样的一个报错. 就在启动HDFS调用命令: start-dfs.sh 的时候,报错: 然后输密码就一直很奇怪,反正一直运行不成功. 百度了半天,确定是core-s ...
- 089 Gray Code 格雷编码
格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异.给定一个代表编码总位数的非负整数 n,打印格雷码序列.格雷码序列必须以0开头.例如, 给定 n = 2, 返回 [0,1,3 ...
- C. Anton and Making Potions 贪心 + 二分
http://codeforces.com/contest/734/problem/C 因为有两种操作,那么可以这样考虑, 1.都不执行,就是开始的答案是n * x 2.先执行第一个操作,然后就会得到 ...
- (转载)Unity 优化总结
Unity 优化总结 2017-03-10 | 发布 大海明月 zengfeng75@qq.com | 分类 Unity | 标签 Unity 优化 相关文档 UGUI 降低填充率技巧两则 U ...