一、模块的循环导入问题

run.py

# import m1 # 第一次导入

m1.py

# 错误示范
'''
print('正在导入m1')
from m2 import y #第一次导入m2
x='m1'
'''

m2.py

# 错误示范
'''
print('正在导入m2')
from m1 import x y='m2'
'''

解决方案:

一:把循环导入的语句放到名字定义的后面

# m1.py
# y='m2'
# from m1 import x
# m2.py
# print('正在导入m2')
#
# y='m2'
# from m1 import x

二:将循环导入的语句放到函数内

# m1.py
print('正在导入m1') def f1():
from m2 import y,f2 #第一次导入m2
print('m1.f1---->y: ',y)
f2()
x='m1'
# m2.py
def f2():
from m1 import x
print('m2.f2--->x: ',x) y='m2'

二、区分python文件的两种用途

当文件被执行时__name__=='__main__'

当文件被导入时__name__=='模块名'

if __name__ == '__main__':
f1()
f2()

三、模块的搜索路径

模块搜索路径的优先级:1.内存中已经加载过的,2.内置模块,3.sys.path第一个值是当前执行文件所在的文件夹

环境变量是以当前执行文件为准的.

注: 所有被导入的模块参照环境变量sys.path都是以执行文件为准的.被导入的模块再去导入其它模块,也是参照sys.path

四、绝对导入与相对导入

绝对导入:以执行文件的sys.path为起始位置开始导入,称之为绝对导入

  优点:执行文件与被导入的模块中都可以用

  缺点:所有导入都是以sys.path为起始点,导入麻烦

相对导入:

  符号:一个"."代表当前所在文件夹,".."代表上一级文件夹,"..."代表上一级的上一级文件夹

  优点:导入更加简单

  缺点:只能在导入包中的模块时才能使用,不能在执行文件中使用

注意: 执行文件中只能用绝对导入

五、软件开发的目录规范

规范化的目录结构能更好的控制程序,让程序具有更高的可读性

1.可读性高 2.可维护性高

通常一个项目都会有的目录如下:

项目名/

| -- bin/  #程序启动脚本/程序入口

|  | -- start.py

|

| -- conf/ #配置文件

|        | --settings.py

| -- core/ #业务逻辑

|        | --src.py

| -- db/

|        | --数据库文件

| -- lib/ #第三方库

|        | --common.py

| -- log/  #日志

|        | --transaction.log

README #说明文档

目录后继会继续补充!

python-模块入门二(模块循环导入,区分python文件的两种用途,模块搜索路径,软件开发的目录规范)的更多相关文章

  1. [软件开发的目录规范、区分py文件的两种用途]

    [软件开发的目录规范] 软件开发的目录规范 bin: 执行文件 conf: 存放配置文件相关代码 core: 存放源文件,业务逻辑相关代码 db: 存放数据库文件,主要用于与数据库交互 lib: 存放 ...

  2. 模块的四种形式、 import和from...import、 循环导入问题、模块的搜索路径、 python文件的两种用途

    目录 模块的四种形式 模块 模块的四种形式 import和from...import 循环导入问题 模拟问题的发生: 解决方案 模块的搜索路径 Python文件的两种用途 模块的四种形式 Nike推荐 ...

  3. 模块导入及使用,关键字,模块搜索路径,python文件的两种用途

    06.05自我总结 一.模块导入及使用 1.模块导入的两种方式 我们拿time模块并使用其中的time功能进行举例 a)第一种 import time print(time.time) import首 ...

  4. Python 1-3区分Python文件的两种用途和模块的搜索路径

    区分Python文件的两种用途 run.py文件: import m1 m1.py文件: def f1(): print('f1') def f2(): print('f2') #当文件被执行时__n ...

  5. Python文件的两种用途

    目录 一.Python文件的两种用途 一.Python文件的两种用途 python文件总共有两种用途,一种是执行文件:另一种是被当做模块导入. 编写好的一个python文件可以有两种用途: 脚本,一个 ...

  6. 第九章、python文件的两种用途

    目录 第九章.python文件的两种用途 一.用途 第九章.python文件的两种用途 一.用途 当前运行的文件(脚本) 被导入的文件(模块) # aaa.py x = 1 def f1(): pri ...

  7. python学习之-软件开发的目录规范

    通常软件目录下有几个标准文件夹 软件主文件夹命名,通常都是大写(ATM_SHOPPING) ------------------------------------------------------ ...

  8. Python模块入门(二)

    一.模块的循环导入问题 在python工程中,由于架构不当,可能会出现模块间互相引用的情况.这时候需要通过一些方法来解决这个问题 1.重新设计架构,解决互相引用的关系. 2.把import语句放置在模 ...

  9. 2.Python爬虫入门二之爬虫基础了解

    1.什么是爬虫 爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来.想抓取什么?这个由你来控制它咯. ...

随机推荐

  1. loj 10181 绿色通道 二分答案+单调队列DP

    空题段长度即为单调队列长度区间 每次二分答案进行check即可 #include<bits/stdc++.h> using namespace std; ; const int inf=0 ...

  2. 多线程this逃逸

    this逃逸,  是指在构造函数返回之前,其它线程就持有该对象的引用,调用尚未构造完全的对象的方法,可能引发令人疑惑的错误,应该避免this逃逸事件的发生. this逃逸经常发生在构造函数中启动线程或 ...

  3. HTML字体自动换行第二行缩进一格

    p {text-indent: -2em; margin-left: 2em;}设置text-indent: -2em;以后p标签中第一行文字向左偏移,这样第二行开始的文字就等于缩进了,但是这样设置会 ...

  4. 迅为4412开发板QtE系统源码-屏幕横竖屏切换修改方法

    迅为4412开发板QtE系统源码-屏幕横竖屏切换修改方法 详情了解:http://topeetboard.com 更多了解:https://arm-board.taobao.com/ 用户在开发板上运 ...

  5. python web cgi

    知识详解: cgi:通用网关接口,网络脚本的解析 python cgi 自带有cgi轻量级服务器,我们通过cgi命令可以开启该服务器 python2 python -m CGIHTTPServer p ...

  6. Javascript - ExtJs - 组件 - 分页

    服务端只需要返回如下格式的字符串,ExtJs就可以解析并自动生成分页数据.  , name: "sam" }     ] } 准备: CREATE PROCEDURE [dbo]. ...

  7. ubuntu14.04配置face_recognition环境

    Github项目地址:https://github.com/MiChongGET/face_collection 环境搭建 1.  环境 ubuntu14.04 LTS python2.7 pip   ...

  8. [转] python运行时内存分析工具meliae

    转自:https://my.oschina.net/markco/blog/601773 利用meliae来监控python进程的内存占用情况 meliae是一个python进程内存占用监控.分析工具 ...

  9. Python笔记 【无序】 【三】

    #打开文件 os.open(file, flags[, mode]); file -- 要打开的文件 flags -- 该参数可以是以下选项,多个使用 "|" 隔开: os.O_R ...

  10. Python3-递归函数

    什么是递归? 递归,就是函数在运行的过程中调用自己. 代码示例 def recursion(n): print(n) recursion(n+) recursion() 出现的效果就是,这个函数在不断 ...