python学习-Day18
今日内容详细
模块
循环导入问题
两个文件彼此导入彼此
# 循环导入的时候极有可能出现某个名字还没有被创建就使用的情况导致报错
如果确实需要循环导入 那么需要确保双方使用的名字都必须'提前定义好'
(一错再错的办法)
方式1:将导入模块的句式写在定义名字的下面
方式2:将导入模块的句式写在函数体代码内
判断文件类型
判断文件类型是作为模块文件还是执行文件
py文件可以被分为两种类型
1.执行文件
2.被导入文件(模块)
内置变量 __ name __
'''
当__name__所在的文件是执行文件的时候 返回结果是__main__
当__name__所在的文件是被导入文件时候 返回结果是文件名(模块名)
'''
# 可以借助于__name__区分被导入的代码和测试代码
if __name__ == '__main__':
当前文件是执行文件的时候才会执行的子代码块
简写方式:
直接输入main之后按tab键即可
# 常用于启动脚本中
模块的查找顺序
"""
1.先从内存空间中查找
2.再从内置模块中查找
3.最后去sys.path查找(类似于我们前面学习的环境变量)
如果上述三个地方都找不到 那么直接报错!!!
"""
验证先从内存空间中查找
import md1
import time
time.sleep(15) # 睡眠期间将md1文件删除
print(md1.name)
验证再从内置模块中查找
import time
print(time)
print(time.time())
'''在创建py文件时候一定不要跟内置或第三方的模块名产生冲突'''
验证sys.path
import sys
print(sys.path) # 结果是一个列表 里面存放了很多路径
# 内存中和内置中都没有要查找的模块时 就会去sys.path里面的路径中挨个查找
'''
sys.path中虽然有很多路径 但是只需要重点关注第一个路径,也就是执行文件所在的路径
查找模块的时候只需要站在执行文件所在的路径查看即可.
'''
解决
主动添加sys.path路径(类似于添加环境变量)
import sys
sys.path.append(r'/Users/qingqin1130/PycharmProjects/DayoneDay/aaa')
import mddd
print(mddd.name)
"""
pycharm会自动将项目目录所在的路径添加到sys.path中
"""
利用from...import...句式指名道姓的查找
from aaa import mddd # 从文件夹aaa中导入mddd模块
print(mddd.name)
from aaa.bbb.ccc import mm # 通过点的方式进入下一层目录
print(mm.name)
绝对导入与相当导入
在导入模块的时候,无论导入的句式是在执行文件中还是在被导入文件中,一切查找模块的句式都是以执行文件为准
绝对导入
'''永远按照执行文件所在的路径一层层往下查找'''
相对导入
相对导入打破了必须参照执行文件的所在路径的要求,只需要考虑当前模块所在的路径然后使用特殊符号' . '去查找其他模块即可
from . import a
''' 相对导入只能在被导入文件中使用 不能在执行文件中使用'''
小知识
. 表示当前路径
.. 表示上一层路径
../.. 表示上上一层路径
'''若想一劳永逸 那么就只使用绝对导入即可'''
包
概念
包就是一个含有__init__.py文件的文件夹,文件夹内可以放置子模块或子包(内部存放了多个模块文件)
注*
#1. 在python3中,即使包下没有__init__.py文件,import 包仍然不会报错,而在python2中,包下一定要有该文件,否则import 包会报错
#2. 创建包的目的不是为了运行,而是被导入使用,包只是模块的一种形式而已,包的本质就是一种模块
包的使用
首次导入包(如import pool)同样会做三件事:
1、执行包下的__init__.py文件
2、产生一个新的名称空间用于存放__init__.py执行过程中产生的名字
3、在当前执行文件所在的名称空间中得到一个名字--包名,该名字指向__init__.py的名称空间,例如 pool.xxx和 pool.yyy中的xxx和yyy都是来自于 pool 下的__init__.py,也就是说导入包时并不会导入包下所有的子模块与子包
向包索要名字
"""
在导入包的时候,索要名字其实是跟包里面的__init__.py要
1.如果想直接通过包的名字使用包里面所有的模块 那么需要在__init__.py中提前导入
上述方式的好处在于__init__可以提前帮你准备好可以使用的名字
2.也可以直接忽略__init__的存在使用绝对导入即可
上述方式的好处在于不需要考虑包的存在 直接当成普通文件夹即可
"""
软件开发目录规范
# 我们实际工作中编写的程序软件都是有很多文件夹和文件组成的
这些文件夹和文件其实都有各自存在的意义和主要功能
"""
查看文件名称很多时候可以找到相同文件名的文件
"""
bin文件夹
存放程序的启动文件 start.py
conf文件夹
存放程序的配置文件 settings.py
core文件夹
存放程序的核心业务 src.py
就是最为重要的代码 能够实现具体需求
lib文件夹
存放程序公共的功能 common.py
db文件夹
存放程序的数据 userinfo.txt
log文件夹
存放程序的日志记录 log.log
readme文本文件
存放程序的说明、广告等额外的信息
requirements.txt文本文件
存放程序需要使用的第三方模块及对应的版本
python学习-Day18的更多相关文章
- python学习-day18、文件处理、
4.文件操作 武sir:http://www.cnblogs.com/wupeiqi/articles/4943406.html 林海峰:http://www.cnblogs.com/linhaife ...
- python学习 day18 (3月25日)---( 面向对象浅析)
面向对象思想: 字典表示对象: 不是太好 因为 变量 得一个个的赋值改值 {'name':'alex','blood':20,'attack':1,'sex':'不'} {'name':'太亮','b ...
- Python学习-day18 Web框架
众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 ...
- python学习博客地址集合。。。
python学习博客地址集合... 老师讲课博客目录 http://www.bootcdn.cn/bootstrap/ bootstrap cdn在线地址 http://www.cnblogs. ...
- python学习之旅
python学习分类 python基础 +- day01——python初始.变量.常量.注释.基础数据类型.输入.if day02——while.字符串格式化.运算符.编码初识 day03—— ...
- Python学习--04条件控制与循环结构
Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...
- Python学习--01入门
Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...
- Python 学习小结
python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...
- Python学习路径及练手项目合集
Python学习路径及练手项目合集 https://zhuanlan.zhihu.com/p/23561159
随机推荐
- Prometheus+alertmanager告警配置-2
prometheus 告警 prometheus 通过alertmanager进行告警 实现监控告警的步骤: 在prometheus中定义告警规则rule_files alertmanager配置告警 ...
- python-binasscii模块学习
作用 binascii模块包含很多在二进制和ASCII编码的二进制表示转换的方法.通常情况不会直接使用这些功能,而是使用像UU,base64编码,或BinHex封装模块. binascii模块包含更高 ...
- 详细描述一下 Elasticsearch 索引文档的过程 ?
面试官:想了解 ES 的底层原理,不再只关注业务层面了. 解答: 这里的索引文档应该理解为文档写入 ES,创建索引的过程. 文档写入包含:单文档写入和批量 bulk 写入,这里只解释一下:单文档写入流 ...
- 百度地图Api使用常见问题
引用 百度地图API文档 百度地图使用文档 使用 LocalSearch 控件搜索出来的Marker无法点击的问题或者导致第一个Marker标注的信息框关闭后Label消失 解决方法就是使用 onMa ...
- jQuery对象的创建
1.js类库 JavaScript封装了很多的预定义的对象和实用函数,能帮助使用者建立有高难度交互 客户端页面,并且兼容各大浏览器.跑在浏览器,请求服务器 当前比较流行的js库: jquery EXT ...
- java常用方法集合
1.获取当前日期 // 获取当前日期 public Date getDate(int num) { Calendar cal = new GregorianCalendar(); cal.setTim ...
- circle_clock 简单canvas实现圆弧时钟
渣渣成品图:http://codepen.io/thewindswor... 最近对于圆形有种特别的感情呢...因为写了个cricle_process_bar就像到了用来做时钟大概会比较有趣吧,所以就 ...
- Javascript--function的name属性
1.非标准的name属性 function sayHi(){ console.log("Hi");} console.log(sayHi.name);
- 【Android开发】【布局】 仿QQ的UI
Demo地址
- 常用 adb 命令总结
1. 显示当前运行的全部模拟器: adb devices 2. 安装应用程序: adb install -r 应用程序.apk 3. 获取模拟器中的文件: a ...