今日内容详细

模块

循环导入问题

两个文件彼此导入彼此

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

如果确实需要循环导入 那么需要确保双方使用的名字都必须'提前定义好'
(一错再错的办法)
方式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. 数据库连接Database link?

    在一个用户下,可以获取到另外的用户下的表的数据,通常在跨数据库时使用. create database link link93 connect to scott identified by tiger ...

  2. java中会存在内存泄漏吗,请简单描述?

    所谓内存泄露就是指一个不再被程序使用的对象或变量一直被占据在内存中.java中有垃圾回收机制,它可以保证一对象不再被引用的时候,即对象编程了孤儿的时候,对象将自动被垃圾回收器从内存中清除掉.由于Jav ...

  3. 什么是 Idempotence 以及它在哪里使用?

    幂等性是能够以这样的方式做两次事情的特性,即最终结果将保持不变,即好像 它只做了一次. 用法:在远程服务或数据源中使用 Idempotence,这样当它多次接收指令时,它 只处理指令一次.

  4. 什么是线程池(thread pool)?

    在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内 存资源或者其它更多资源.在 Java 中更是如此,虚拟机将试图跟踪每一个对象, 以便能够在对象销毁后进行垃圾回收.所以提高服务程 ...

  5. memcached 是如何做身份验证的?

    没有身份认证机制!memcached 是运行在应用下层的软件(身份验证应该是应用 上层的职责).memcached 的客户端和服务器端之所以是轻量级的,部分原因就 是完全没有实现身份验证机制.这样,m ...

  6. Spring MVC 框架有什么用?

    Spring Web MVC 框架提供 模型-视图-控制器 架构和随时可用的组件,用于开 发灵活且松散耦合的 Web 应用程序.MVC 模式有助于分离应用程序的不同方 面,如输入逻辑,业务逻辑和 UI ...

  7. 数仓建模—OneID

    今天是我在上海租房的小区被封的第三天,由于我的大意,没有屯吃的,外卖今天完全点不到了,中午的时候我找到了一包快过期的肉松饼,才补充了1000焦耳的能量.但是中午去做核酸的时候,我感觉走路有点不稳,我看 ...

  8. Java中final的使用

    原文链接https://www.cnblogs.com/dolphin0520/p/10651845.html 作者Matrix海 子 本文为笔记 0. 概述 final和static一样都是修饰词, ...

  9. background-clip 和 background-origin

    下面都是我自己的理解, 如果有不对的地方, 还请大家帮忙指出.下面是在 chrome 浏览器上测试的 background-clip 和 background-origin 先说说background ...

  10. 探讨:微信小程序应该如何设计

    微信小程序公测后,开发者非常热情,都有很高的期待,都想抓住这一波红利.但是热情背后需要冷静,我们需要搞清楚两个问题: 微信想要我们做什么?微信小程序可以做什么? 微信想要我们做什么? 首先来弄清楚微信 ...