今日内容详细

模块

循环导入问题

两个文件彼此导入彼此

#	循环导入的时候极有可能出现某个名字还没有被创建就使用的情况导致报错

如果确实需要循环导入 那么需要确保双方使用的名字都必须'提前定义好'
(一错再错的办法)
方式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的更多相关文章

  1. python学习-day18、文件处理、

    4.文件操作 武sir:http://www.cnblogs.com/wupeiqi/articles/4943406.html 林海峰:http://www.cnblogs.com/linhaife ...

  2. python学习 day18 (3月25日)---( 面向对象浅析)

    面向对象思想: 字典表示对象: 不是太好 因为 变量 得一个个的赋值改值 {'name':'alex','blood':20,'attack':1,'sex':'不'} {'name':'太亮','b ...

  3. Python学习-day18 Web框架

    众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 ...

  4. python学习博客地址集合。。。

    python学习博客地址集合...   老师讲课博客目录 http://www.bootcdn.cn/bootstrap/  bootstrap cdn在线地址 http://www.cnblogs. ...

  5. python学习之旅

    python学习分类 python基础    +- day01——python初始.变量.常量.注释.基础数据类型.输入.if day02——while.字符串格式化.运算符.编码初识 day03—— ...

  6. Python学习--04条件控制与循环结构

    Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...

  7. Python学习--01入门

    Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...

  8. Python 学习小结

    python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...

  9. Python学习路径及练手项目合集

    Python学习路径及练手项目合集 https://zhuanlan.zhihu.com/p/23561159

随机推荐

  1. python数据分析与挖掘实战————银行分控模型(几种算法模型的比较)

    一.神经网络算法: 1 import pandas as pd 2 from keras.models import Sequential 3 from keras.layers.core impor ...

  2. RPC框架 和 fegin原理

    打个比方,你有一些想法,你把他们变成文字写在信纸上,这是http 你把这个信纸塞进信封,这个信封是tcp 你把这个信封写上地址交给邮局,这地址是IP 一层套一层 会话层,表示层,应用层归到一起  就是 ...

  3. 集成SpringCloudBus,但没有总线通知更改

    配置服务端别忘了添加以下2个依赖 implementation("org.springframework.cloud:spring-cloud-config-server")imp ...

  4. 说一下 jvm 有哪些垃圾回收器?

    新生代收集器: SerialParNewParallel Scavenge 老年代收集器: Serial OldCMSParallel Old 堆内存垃圾收集器: G1 参考链接:JVM常见的垃圾回收 ...

  5. Numpy常用random随机函数汇总

    Numpy常用random下的随机函数汇总 官方文档地址:https://docs.scipy.org/doc/numpy-1.14.0/reference/routines.random.html ...

  6. 用Canvas画一棵二叉树

    笔墨伺候 var canvas = document.getElementById('canvas'); var ctx = canvas.getContext('2d'); // 然后便可以挥毫泼墨 ...

  7. 简单才是美! SpringBoot+JPA

    SpringBoot 急速构建项目,真的是用了才知道,搭配JPA作为持久层,一简到底!下面记录项目的搭建,后续会添加NOSQL redis,搜索引擎elasticSearch,等等,什么不过时就加什么 ...

  8. Unity中让Update中的方法执行一次

    Unity中让Update中的方法执行一次 Unity中,很多时候,代码需要放在Update中时刻监测状态,一旦状态符合,又只需要代码执行一次:其实可以通过设置控制量的方式,让代码只执行一次:方法:设 ...

  9. java基础-多线程 等待唤醒机制

       /**  * @param args  * 等待唤醒机制  */ public static void main(String[] args) {  final Printer p = new ...

  10. jboss7学习2-jboss7入门(端口和访问的ip问题)

    1.下载地址: http://www.jboss.org/jbossas/downloads ,下载Certified Java EE 6 Full Profile版本. 2.解压 jboss-as- ...