模块,循环导入

目录

  • 模块的四种形式
  • import和from...import...
    • import 模块
    • from 模块 import 方法
    • import与from...import的优缺点
  • 循环导入
    • 解决方法
  • 模块的搜索路径
  • python文件的两种用途

模块的四种形式

在python中,总共有以下四种形式的模块:

  1. 内置模块:python解释器启动自带的模块,random / time ……
  2. pip install 安装的模块
  3. 自定义模块:如果你自己写一个py文件,在文件内写入一堆函数,则它被称为自定义模块,即使用python编写的.py文件
  4. 包:把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称为包)

import和from...import...

import 模块

import time这个代码做了以下事情

  • 开辟内存空间,内存空间命名为time
  • 把time.py中的所有代码读入名称空间,然后运行
  • 通过time.方法名使用time模块中的方法

from 模块 import 方法

from time import sleep

  • 开辟内存空间,内存空间命名为time
  • 把time.py中的所有代码读入名称空间,然后运行
  • 把sleep()方法读入当前文件中,因此可以直接使用sleep方法

如果想使用多个方法:

from time import sleep,time

导入所有功能:

from time import *

import与from...import的优缺点

import:

  • 优点:永不冲突
  • 缺点:每次导入多输入几个字符

from...import的优缺点:

  • 优点:少输入几个字符
  • 缺点:容易与当前执行文件中名称空间中的名字冲突

循环导入

# m1.py
from m2 import y

x = 10
print('m1:', x, y)
  1. 创建m2的名称空间
  2. 执行m2.py,将执行产生的名字丢到m2.py
  3. 在当前执行文件中拿到m2.x
# m2.py
from m1 import x

x = 20
print('m2:', x, y)
  1. 创建m1的名称空间
  2. 执行m1.py,将执行产生的名字丢到m1.py
  3. 在当前执行文件中拿到m1.y

由于模块永远只会开辟一次空间,所有这样不会永远循环下去,一次就会报错

解决方法

方案一:

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

方案二:

这个解决方法就是:函数定义阶段只检测语法,不执行代码

# m1.py
x = 10
def f1():
    from m2 import y

    print('m1:', x, y)

f1()
# m2.py
y = 10
def f2():
    from m2 import x

    print('m2:', x, y)

f2()

注:模块永远只开辟一次;from m1 import 必须执行m1.py中所有代码

模块的搜索路径

模块其实就是一个文件,如果要执行文件,首先就需要找到模块的路径(某个文件夹)。如果模块的文件路径和执行文件不在同一个文件目录下,我们就需要指定模块的路径。

模块的搜索路径指的就是在导入模块时需要检索的文件夹。

导入模块时查找模块的顺序是:

  1. 先从内存中已经导入的模块中寻找
  2. 内置(环境变量)
  3. 自定义模块

python文件的两种用途

python文件总共有两种用途,一种是执行文件;另一种是被当做模块导入。

编写好的一个python文件可以有两种用途:

  1. 执行文件,一个文件就是整个程序,用来被执行
  2. 模块,文件中存放着一堆功能,用来被导入使用
# test123.py

def f1():
    print('from f1')

f1()
# run.py

from test123 import f1
如果直接运行run.py会直接运行test123.py中的f1(),但是如果我们在test123.py中加上if`__name__=='__main__'这句话,则可以防止运行run.py时执行f1()。

__name__==‘__main__‘不成立,__name__!=‘__main__‘

当test123为模块文件时,__name__等于文件名

原文地址:https://www.cnblogs.com/setcreed/p/11605004.html

时间: 2024-11-09 00:02:43

模块,循环导入的相关文章

(转)Python中的模块循环导入问题

本文转自: https://wiki.woodpecker.org.cn/moin/MiscItems/2008-11-25 问题 cleven <[email protected]> 回覆至 [email protected] 收件人 [email protected] 日期 2008年11月25日 下午 12:01 主旨 [CPyUG:72341] import嵌套的问题 看了<Python源码剖析>,里面提到的嵌套import的问题还是没有弄明白,各位给看一下吧. [A.py

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.用别人写好的模块(内置

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

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

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')

Python开发常见问题之各模块循环依赖

今天写了一个程序,由于设计上的问题,导致两个模块需要相互引用,出现了“importError”错误.分析良久,对于模块循环依赖的问题有两种方法: 1.可通过调整import导入顺序来解决,把 import 语句放到方法定义的后面即可 2.两个模块写到一个文件里面去 对于此类问题Python并没有提供解决方案,所以尽量在设计之初就要避免出现模块循环依赖问题,以免开发后期大刀阔斧的修改.

模块的导入和使用

一 模块 3.1 import 3.2 from ... import... 3.3 把模块当做脚本执行 3.4 模块搜索路径 3.5 编译python文件 二 包 2.2 import 2.3 from ... import ... 2.4 __init__.py文件 2.5  from glance.api import * 2.6 绝对导入和相对导入 2.7 单独导入包 一 模块 1 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py

ParisGabriel:Python全栈工程师(0基础到精通)教程 第二十课(包、模块 的导入)

$ pip3 install tensorflow : 第三方模块 tensorflow 的安装 电脑必须有网 命令行自动下载安装dir(模块名): 查看模块所有属性 自定义模块导入 示例: 自定义模块的实现方法 def myfac(n): print('正在计算', n, '的阶乘') def mysum(n): print("正在计算1+2+3+...+%d的和" % n) name1 = "Audi" name2 = "TESLA" pri

python模块以及导入出现ImportError: No module named &#39;xxx&#39;问题

python模块以及导入出现ImportError: No module named 'xxx'问题 python中,每个py文件被称之为模块,每个具有__init__.py文件的目录被称为包.只要模 块或者包所在的目录在sys.path中,就可以使用import 模块或import 包来使用 如果你要使用的模块(py文件)和当前模块在同一目录,只要import相应的文件名就好,比 如在a.py中使用b.py:  import b 但是如果要import一个不同目录的文件(例如b.py)该怎么做

python模块的导入以及模块简介

一.模块的定义及类型 1.定义 模块就是用一堆的代码实现了一些功能的代码的集合,通常一个或者多个函数写在一个.py文件里,而如果有些功能实现起来很复杂,那么就需要创建n个.py文件,这n个.py文件的集合就是模块 2.类型 1)自定义模块,自己写的实现自己某些功能需求的.py文件集合 2)导入的模块 在你安装python之后,它自己内部的lib文件下就有很多模块可以用,导入后就可以使用,通常路径是C:\Python27\Lib   (27是版本号,如果是3.5的版本就是C:\Python35\L