1 from...import

1.1 概念

1.1.1 首次导入模块会发生的事

  • 会触发模块的运行,产生一个模块的名称空间
  • 将运行模块文件过程中产生的名字丢到模块额名称空间
  • 在当前名称空间产生一个名字money,该名字指向名称空间中那个money

1.2 应用

1.2.1 模块spam

# spam.py
print("from the spam.py") money = 1000 def change():
global money
money = 0
print(money) def func1():
print("----->%s" % money) def func2():
print('=====>')
func1()

1.2.2 导入模块

from spam import money
print(money) # 1000
money = 20000
print(money) # 20000 from spam import money as m
print(m) # 1000 from spam import money,func1,change
print(money) # 1000
func1() # ----->1000
change() # 0 from spam import money,func1,change
money = 200000
def func1():
print(money)
func1() # 200000

1.3 优缺点

1.3.1 优点

  • 无需加前缀,代码更为简洁

1.3.2 缺点

  • 容易与当前名称空间中的名字冲突

1.4 *

from spam import *
print(money)
print(func1)
print(func2)
print(change)

2 循环导入问题

2.1 情景一

2.1.1 m1

print('running m1')

from m2 import y

x = 'm1'

2.1.2 m2

print('running m2')

from m1 import x

y = 'm2'

2.1.3 run

import m1

m1()

会报错,因为循环导入时没有取到值

2.2 补救措施1

2.2.1 m1

print('running m1')
def f1():
from m2 import y
print(y)
x = 'm1'

2.2.2 m2

print('running m2')
def f2():
from m1 import x
print(x)
y = 'm2'

2.2.3 run

import m1
m1.f1()

2.3 补救措施2

2.3.1 m1

print('running m1')
x = 'm1'
from m2 import y

2.3.2 m2

print('running m2')
y = 'm2'
from m1 import x

2.3.3 run

import m1
m1()

3 区分文件与模块的方式

def f1():
print('from f1') def f2():
print('from f2') if __name__ == '__main__':
f1()
f2()
import m1

4 模块搜索优先级

查找位置优先级
1、内存
2、内置模块
3、sys.path
import sys
print(sys.path) import time
import m1 time.sleep(10)
import m1
# 然后迅速将m1文件删除
m1.f1() # 本次m1会执行,因为内存中有缓存。下一次就会报错 import sys
sys.path.append(r'H:\PycharmProjects\python_new\day013\代码\01from import')
import spam
spam.func1()

5 ATM

5.1 目录

api-->存放接口文件,接口用于为主要业务逻辑提供数据操作

​ api.py-->应用程序编程接口

bin-->整个项目的启动文件放置在这个文件夹中

​ start.py-->启动软件入口

conf-->整个项目的配置文件放置在这个文件夹

​ settings.py-->配置文件,如存放一些固定的路径

core-->整个项目的核心文件

​ src.py-->核心业务逻辑代码(第一层:用户视图层:核心业务逻辑代码)

db-->用于存放数据文件与操作数据的代码文件

​ db_file-->db.txt ...

​ db_handler.py-->操作数据的代码(第三层:数据处理层)

interface-->用于存放用户接口

​ user_interface.py-->第二层(用户接口)

lib-->项目的第三方包,共享的一些库

​ common-->存放公共的功能,如存放装饰器

log-->用于存放项目的日志文件

​ log.txt-->存放日志的文件

README.txt-->整个项目的说明文件,项目需求和大致流程,相当于产品说明书

5.2 README.txt内容

软件定位|软件的基本功能

  • 运行代码的方法:安装环境、启动命令等...
  • 简要的使用说明
  • 代码目录结构说明,更详细点的说明软件的基本原理
  • 常见问题说明

day013|python之模块02&目录01的更多相关文章

  1. Python shutil模块(目录和文件操作)

    import shutil #导入shutil模块 copyfileobj方法 将类文件对象fsrc的内容复制到类文件对象fdst shutil.copyfileobj(fsrc, fdst[, le ...

  2. python os模块 遍历目录

    #os #os ->tree命令 import os #递归 #目录 ->文件,文件夹 -> 文件文件夹 dirpath = input('请输入你要遍历的目录\n') def ge ...

  3. Python之模块IO

    目录 Python之模块IO io概叙 io类层次结构 io模块的类图 io模块的3种I/O 原始I/O,即RawIOBase及其子类 文本I/O,即TextIOBase及其子类 字节I/O(缓存I/ ...

  4. Python模块02/序列化/os模块/sys模块/haslib加密/collections

    Python模块02/序列化/os模块/sys模块/haslib加密/collections 内容大纲 1.序列化 2.os模块 3.sys模块 4.haslib加密 5.collections 1. ...

  5. Python之文件与目录操作及压缩模块(os、shutil、zipfile、tarfile)

    Python中可以用于对文件和目录进行操作的内置模块包括: 模块/函数名称 功能描述 open()函数 文件读取或写入 os.path模块 文件路径操作 os模块 文件和目录简单操作 zipfile模 ...

  6. Python::OS 模块 -- 文件和目录操作

    os模块的简介参看 Python::OS 模块 -- 简介 os模块的进程管理 Python::OS 模块 -- 进程管理 os模块的进程参数 Python::OS 模块 -- 进程参数 os模块中包 ...

  7. python 在不同层级目录import 模块的方法

    有一个文件夹/home/a,  里面有个模块叫b.py,  我怎么把他import到程序里? 1). import sys; sys.path.append("/home/a/") ...

  8. python一些模块的exe安装包在windows的64位系统里识别不到已安装Python目录的解决方法

    在windows里安装python一些模块时候,有时候源码安装比较困难,pip install也各种报错,这时候最喜欢用别人编译好的exe或者whl文件来安装,但是在windows的64位系统里,如果 ...

  9. python之模块filecmp(文件/目录比较)

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python之模块filecmp(文件/目录比较) #用于比较文件及文件夹的内容.他是轻量级的工具.可以做一 ...

随机推荐

  1. 硬盘LBA 和CHS的关系(转)

    磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数 l         磁头(head)数:每个盘片一般有上下两面,分别对应1个磁头,共2个磁头:l         磁道(track)数:磁 ...

  2. 从ceph对象中提取RBD中的指定文件

    前言 之前有个想法,是不是有办法找到rbd中的文件与对象的关系,想了很久但是一直觉得文件系统比较复杂,在fs 层的东西对ceph来说是透明的,并且对象大小是4M,而文件很小,可能在fs层进行了合并,应 ...

  3. rbd的增量备份和恢复

    前言 快照的功能一般是基于时间点做一个标记,然后在某些需要的时候,将状态恢复到标记的那个点,这个有一个前提是底层的东西没用破坏,举个简单的例子,Vmware 里面对虚拟机做了一个快照,然后做了一些系统 ...

  4. 每日理解(一) Spring框架

    每日理解 SpringIOC 控制反转 在Java SE中通过new来创建对象.而在Spring中通过容器来控制对象. 所谓的控制包括:对象的创建.初始化.以及销毁.我们有之前的主动控制对象,变为了S ...

  5. HDU100题简要题解(2070~2079)

    HDU2070 Fibbonacci Number 题目链接 Problem Description Your objective for this question is to develop a ...

  6. day02-业务服务监控

    提供大量第三方工具,可以开发企业级服务监控平台,本章涉及文件与目录差异对比.HTTP质量监控.邮件告警等内容一.文件内容差异比对1.示例1 d = difflib.Differ() diff = d. ...

  7. MySQL错误修复:Table xx is marked as crashed and last (automatic?) repair failed

    问题一 Table xx is marked as crashed and last (automatic?) repair failed 有开发找到我,说数据库坏了,连不上数据库,看了下 MySQL ...

  8. Lambda表达式(一)入门认识篇

    Lambda表达式(一)入门认识篇 Lambda简介 Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极 ...

  9. Vue Springboot (包括后端解决跨域)实现登录验证码功能详细完整版

    利用Hutool 基于Vue.ElementUI.Springboot (跨域)实现登录验证码功能 前言 一.Hutool是什么? 二.下面开始步入正题:使用步骤 1.先引入Hutool依赖 2.控制 ...

  10. 精尽MyBatis源码分析 - 插件机制

    该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释(Mybatis源码分析 GitHub 地址.Mybatis-Spring 源码分析 GitHub ...