python 循环导入的问题

目录

  • 循环导入的问题
  • 一、什么是循环导入?
  • 二、解决方案
    • 2.1方案一
  • 2.2 方法二

循环导入的问题

一、什么是循环导入?

就像下图一样是一个循环的过程,只要开始就没有结束。

#m1.py

print('from m1.py')
from m2 import x

y = 'm1'
  1. 创建m2的名称空间
  2. 执行m2.py,将执行产生的名字丢到m2.py
  3. 在当前执行文件中拿到m2.x
#m2.py
print('from m2.py')
from m1 import y
x = 'm2'
  1. 创建m1的名称空间
  2. 执行m1.py,将执行产生的名字丢到m1.py
  3. 在当前执行文件中拿到m1.py
# run.py
import m1
  1. 创建m1的名称空间
  2. 执行m1.py,将执行产生的名字丢到m1.py
  3. 在当前执行文件拿到m1
  • 无论运行run.py,m1.py或者m2.py都会报错

二、解决方案

上面说的问题就是循环导入的问题

我们可以使用函数定义阶段只识别语法的特性解决循环导入的问题,我们也可以从本质上解决循环导入的问题,单身最好的解决方法是不要出现循环导入的问题。

2.1方案一

# m1.py
print('from m1.py')

def func1():
    from m2 import x
    print(x)

y = 'm1'
func1()
#m2.py
print('from m2.py')
def func1():
    from m1 import y
    print(y)

x = 'm2'
func1()

2.2 方法二

#m1.py

print('from m1.py')
y = 'm1'

from m2 import x
#m1.py

print('from m1.py')
y = 'm1'

from m2 import x

原文地址:https://www.cnblogs.com/chenziqing/p/11372301.html

时间: 2024-11-05 15:17:56

python 循环导入的问题的相关文章

Python 1-2模块的循环导入问题

run.py文件: import m1 # 第一次导入 # 验证解决方案一: ''' 正在导入m1 正在导入m2 ''' # print(m1.x) # print(m1.y) # 验证解决方案二: import m1 # 第一次导入 ''' 正在导入m1 ''' # print(m1.x) # print(m1.f1) m1.f1() ''' 正在导入m2 m1.f1---->y:m2 m2.f2--->x:m1 ''' m1.py文件: # 错误示范 ''' print('正在导入m1')

模块导入、循环导入、模块查找顺序、相对导入及绝对导入

模块导入 什么是模块 模块:就是一系列功能的结合体 模块的三种来源: 1.内置的(python解释器自带) 2.第三方的(别人写的) 3.自定义的(自己写的) 模块的四种表现形式 1.使用python编写的py文件(也就意味着py文件也可以称之为模块:一个py文件也可以称之为一个模块) 2.已被编译为共享库或DLL的C或C++扩展(了解) 3.把一系列模块组织到一起的文件夹(文件夹下有一个__init__.py文件,该文件夹称之为包) 包:一系列py文件的结合体 4.使用C编写并连接到pytho

1.模块2.循环导入问题及解决思路3.区分py文件的两种类型4.模块的查找顺序5.模块的绝对导入与相对导入6.项目开发的目录规范

一.模块 什么是模块? 模块就是一系列功能的结合体 模块的三种来源: 1.内置的(python解释器自带的) 2.第三方的(别人写的) 3.自定义的(你自己写的) 模块的四种表现形式: 1.使用python编写的py文件(也就是意味着py文件也是可以称之为模块 2.已被编译为共享库或DLL的或C++扩展(了解) 3.把一系列模块组织到一起的文件夹(文件夹下有一个__init__.py文件,该文件夹称之为包) 4.使用C编写并连接到Python解释器的内置模块 模块选择 1.用别人写好的模块(内置

python基础--导入模块

一,import的使用1, 模块就是一组功能的集合体,我们的程序可以导入模块来复用模块中的功能一个模块就是包含了一组功能的python文件,例如demo.py 可以通过import来使用这个文件定义demo模块如下 print("导入模块") num = 1000 def read1(): print('demo模块',num) def read2(): print('demo模块') read1() def change(): global num num = 0 模块中可以包含语句

模块,循环导入

目录 模块的四种形式 import和from...import... import 模块 from 模块 import 方法 import与from...import的优缺点 循环导入 解决方法 模块的搜索路径 python文件的两种用途 模块的四种形式 在python中,总共有以下四种形式的模块: 内置模块:python解释器启动自带的模块,random / time -- pip install 安装的模块 自定义模块:如果你自己写一个py文件,在文件内写入一堆函数,则它被称为自定义模块,即

python基础:python循环、三元运算、字典、文件操作

目录: python循环 三元运算 字符串 字典 文件操作基础 一.python编程 在面向过程式编程语言的执行流程中包含: 顺序执行 选择执行 循环执行 if是条件判断语句:if的执行流程属于选择执行:if语句有三种格式,如下: 在多分支的if表达式中,即使多个条件同时为真,也只会执行一个,首先测试为真: 选择执行 单分支的if语句 if CONDITION: 条件为真分支 双分支的if语句 if CONDITION 条件为真分支 else 条件不满足时分支 多分支的if语句 if CONDI

Python循环语句

Python语言中的循环结构包含两种语句,分别是while语句和for语句. 1. while语句 while(表达式): -- else: -- 执行过程:当循环表达式为True时,依次执行while中的语句.直到循环表达式的值为False时,才执行else语句或退出循环.其中else子句可以省略,表达式两端的等号也可以省略. 2. for语句 for循环用于遍历一个集合,依次访问集合中的每个项目.格式如下: for 变量 in 集合: -- else: -- 执行过程:每次循环从集合中取出一

Python循环常见的语法错误有哪些?

本文和大家分享的主要是python循环下最易错的一些语法,一起来看看吧,希望对大家学习python有所帮助. 循环语句下break和continue的区别和作用 break和continue都是用来控制循环结构的,主要是停止循环. · break break用于完全结束一个循环,跳出循环体执行循环后面的语句. for x in range(10): if x == 5: break print(x)print('for循环终止') break循环不是等循环条件为False才终止,打印结果为: 0

Python如何导入模块

为了在CMD中的任何位置打开python程序,将pyhon的安装目录导入到环境变量中,如我的安装目录D:\Python27,桌面计算机--->右键属性--->高级系统设置-->环境变量-->path 若为单文件模块,只需要将该文件放在系统环境变量下的任何目录中,在任何位置编写时均可导入. 方法一:下面以安装setuptools工具为例,从站点https://pypi.python.org/pypi/setuptools下载要使用的模块压缩文件.从CMD命令行下跳转到解压后所在的文件