今日内容详细

模块

循环导入问题

两个文件彼此导入彼此

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

如果确实需要循环导入 那么需要确保双方使用的名字都必须'提前定义好'
(一错再错的办法)
方式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. 一个关于wait/notify与锁关系的探究

    wait/notify 机制是解决生产者消费者问题的良药.它的核心逻辑是基于条件变量的锁机制处理.所以,它们到底是什么关系?wait()时是否需要持有锁? notify()是否需要持有锁?先说答案:都 ...

  2. You Don't Know JS Yet Book 1 Notes

    Get Started - 前言 But let me be clear: I don't think it's possible to ever fully know JS. That's not ...

  3. java实现稀疏矩阵的压缩与解压

    任务要求 把棋盘当作一个稀疏矩阵,0表示没棋,1表示黑棋,2表示蓝棋. 把该稀疏矩阵压缩以三元组形式表示并以文件形式保存,再写另一个程序读取文件中的信息把压缩后的三元组还原成原来的稀疏矩阵. 其中三元 ...

  4. 【Java面试宝典】说说你对 Spring 的理解,非单例注入的原理?它的生命周期?循环注入的原理, aop 的实现原理,说说 aop 中的几个术语,它们是怎么相互工作的?

    AOP与IOC的概念(即spring的核心) IOC:Spring是开源框架,使用框架可以使我们减少工作量,提高工作效率并且它是分层结构,即相对应的层处理对应的业务逻辑,减少代码的耦合度.而sprin ...

  5. Axure在Chrome浏览解决方案

    AXURE RP EXTENSION FOR CHROME Google Chrome浏览器需要扩展程序才能查看本地存储的项目.或者,将您的RP文件上传到Axure Cloud或使用其他浏览器.您也可 ...

  6. spring-boot 注解集合

    @Configuration 用于定义配置类,可替换XML配置文件,被注解的类内部包含一个或多个@Bean注解方法.可以被AnnotationConfigApplicationContext或者Ann ...

  7. 什么是 MyBatis 的接口绑定?有哪些实现方式?

    接口绑定,就是在 MyBatis 中任意定义接口,然后把接口里面的方法和 SQL 语句绑 定, 我们直接调用接口方法就可以,这样比起原来了 SqlSession 提供的方法我们可 以有更加灵活的选择和 ...

  8. MOS管防反接电路设计

    转自嵌入式单片机之家公众号 问题的提出 电源反接,会给电路造成损坏,不过,电源反接是不可避免的.所以,我们就需要给电路中加入保护电路,达到即使接反电源,也不会损坏的目的 01二极管防反接 通常情况下直 ...

  9. 论文解读( N2N)《Node Representation Learning in Graph via Node-to-Neighbourhood Mutual Information Maximization》

    论文信息 论文标题:Node Representation Learning in Graph via Node-to-Neighbourhood Mutual Information Maximiz ...

  10. 用Canvas画一棵二叉树

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