当前位置: 首页 > news >正文

8.2 循环导入问题解决

目录
  • 8.2 循环导入问题解决
    • 1. 循环导入示例
    • 2. 解决方法1
      • name变量
    • 3. 解决方法2

8.2 循环导入问题解决

1. 循环导入示例

# m1.py模块文件from m2 import yx=10# m2.pyfrom m1 import xy=10#输出
ImportError: cannot import name 'y' from partially initialized module 'm2' 
  • 问题原因分析

    (1)要想导入m2中的y,就要先去m1中找x,想拿到m1中的x,就·要先去m2找y.....,这就是循环导入问题。

    (2)现在有m1,m2两个文件,m1需要找到m2中的y,m2要找到m1中的x

    (3)由于代码自上而下运行,x,y都没有生成

    (4)m1找不到m2中的y,m2找不到m1的x,就造成了死循环。

2. 解决方法1

# m1.py
x=10
from m2 import y
print(y) #m2.py
y=20
from m1 import x

导入之前让变量提前先生成,但是又发现了一个新问题,会执行两次print,解决办法如下:

# m1.py
x=10
from m2 import y
# print(y) #会打印两次
if __name__=='__main__':print(y) #打印一次
#m2.py
y=20
from m1 import x

name变量

#__name__变量
print(__name__) # 1. __name__在当前文件未执行文件时候是‘__main__’,作为模块文件时候是文件名,如m1。
# 2. 未来在写模块测试所有打印和函数调用都放到if __name__='__main__':下,快捷键main+Tab。

3. 解决方法2

(1) 按照解决方法1写,导入所有东西时不好将所有定义放在导包前,代码写起来不美观。

(2)from m1 import 尽量放前面。

#m1.pyx= 10 #全局,先生成xdef f2():from m2 import y #局部,后导入yprint(y)def f1():passif __name__=='__main__':f2()# m2.pyfrom m1 import xy=20
  • 方法2分析
  1. 解决方法2把需要导入的名字y封装到函数体内部。
  2. 名字的执行顺序:内置(Python解释器启动时候)->全局(文件执行时候)->局部(函数调用时候)。
  3. 调用函数的时候才会用到y,调用函数之前,全局变量x已经生成,m2能找到x,y就能够生成,m1就能找到y,问题解决。
http://www.sczhlp.com/news/50493/

相关文章:

  • 上海网站建设培训学校网站的营销方式有哪些
  • 专业做网站和小程序网站建设怎么设置留言界面
  • 凡科网站做门户网怎么样wordpress多级菜单插件
  • 南昌网站建设维护无人在线完整免费高清观看
  • 网站开发 价格差异网上做衣服的网站有哪些
  • 做旅游景区网站网站建设合同 完整版
  • 宁波企业网站建设公司淘宝网页版手机登录
  • 建设部网站施工员查询建设农业网站
  • 做网站行业的动态北京餐饮品牌设计公司
  • 网站建设哪里培训如何用wordpress制作二级目录
  • 网站做行业认证好处哪个网站专门做邮轮旅游的
  • 株洲建设企业网站定制鱼缸一般多少钱
  • 网站建设模板公司网站开发设计思路文档
  • 网站移动端是什么重庆市官网首页
  • 博客网站建设宿迁住房和城乡建设部网站
  • 做那网站好为什么谷歌浏览器打不开网页
  • 学校集训 2025.8.13 ~ 8.30 最小/大生成树,图的割点专题讲解
  • php网站mysql数据库导入工具泽成seo网站排名
  • 阆中 网站建设内容网站设计范例
  • 12306建网站多少钱wordpress安装后
  • 中国字体设计网站营销型网站建设的步骤
  • 做网站做什么类型 比较赚钱互联网运营主要做什么
  • 网站网页设计如何选遵义网站建设gzyhg
  • 自己做的网站申请软著单产品网站模板
  • 教育网站制作开发平台电商有哪些
  • CF 1046 Div.2 解题报告
  • 力扣215.数组中的第k大的元素 | 堆 |
  • Mock 在 API 研发中的痛点、价值与进化及Apipost解决方案最佳实践
  • CF2114F 8.29考试T1
  • 济宁专业网站建设广告策划书案例完整版