0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

简述python包模块import和from及all

jf_78858299 来源:梯阅线条小梯子 作者:小梯子 2023-02-21 14:20 次阅读

python指定导入目录路径,称为包导入。

通过import和from导入包模块。

通过all指定导入的模块和导入的模块属性。

1.1 python包import和from

用法

import dir1.dir2.mod
from dir1.dir2 import mod
from dir1.dir2.mod import x

描述

NO 内容 描述
1 点号分隔 包导入的路径以点号分隔,点号对应机器路径分隔符。
2 目录关系 包名对应机器目录,左边为父目录,右边为子目录。
3 搜索路径 dir1所在父目录必须在模块搜索路径中。
4 init .py 包导入的路径(目录)必须存在 init .py,才能导入成功。 init .py内容可以为空和非空。
5 包初始化 首次导入包时,自动执行 init .py文件内容。
6 模块初始 import dir1.dir2.mod返回模块对象,包含 init .py的全部变量。
7 import import dir1.dir2.mod后,每次使用都需要写全路径:dir1.dir2.mod.x,如果路径有变更,每处使用的地方都要修改。
8 from from dir1.dir2 import mod,使用不需写全路径:mod.x,如果路径有变更,只需修改from一处。
9 as 通过as给import包取别名,简化书写。

示例

# dir1\\__init__.py
print('在dir1\\__init__.py')
a = 1
# dir1\\dir2\\__init__.py
print('在dir1\\dir2\\__init__.py')
b = 2
# dir1\\dir2\\mod.py
print('在dir1\\dir2\\mod.py')
s = '梯阅线条'
# 在 idle 执行下面示例
>>> import os
>>> path=r'E:\\documents\\F盘'
>>> os.chdir(path)
# 首次导入自动执行__init__.py
>>> import dir1.dir2.mod
在dir1\\__init__.py
在dir1\\dir2\\__init__.py
在dir1\\dir2\\mod.py
>>> dir1.dir2.mod.s
'梯阅线条'
# 再次导入不再执行__init__.py
>>> import dir1.dir2.mod
# 修改py文件
# dir1\\__init__.py
print('修改在dir1\\__init__.py')
a = 1
# dir1\\dir2\\__init__.py
print('修改在dir1\\dir2\\__init__.py')
b = 2
# dir1\\dir2\\mod.py
print('修改在dir1\\dir2\\mod.py')
s = '修改梯阅线条'
# 在 idle 执行下面示例
# 直接import不会执行修改后代码
>>> import dir1.dir2.mod
>>> dir1.dir2.mod.s
'梯阅线条'
# reload 模块或包重新执行对应__init__.py最新代码
>>> reload(dir1.dir2.mod)
修改在dir1\\dir2\\mod.py
>>> dir1.dir2.mod.s
'修改梯阅线条'
'dir1.dir2.mod' from 'E:\\\\documents\\\\F盘\\\\dir1\\\\dir2\\\\mod.py'>
>>> reload(dir1.dir2)
修改在dir1\\dir2\\__init__.py
'dir1.dir2' from 'E:\\\\documents\\\\F盘\\\\dir1\\\\dir2\\\\__init__.py'>
>>> reload(dir1)
修改在dir1\\__init__.py
'dir1' from 'E:\\\\documents\\\\F盘\\\\dir1\\\\__init__.py'>
# 模块对象 包含__init__.py 全部顶层变量
>>> dir1.a
1
>>> dir1.dir2.b
2
# import 需要写全路径,否则找不到模块对象
>>> dir2.mod.s
Traceback (most recent call last):
 File "", line 1, in 
   dir2.mod.s
NameError: name 'dir2' is not defined
# from 不需写全路径,只需写import后面变量即可
>>> from dir1.dir2 import mod
>>> mod.s
'修改梯阅线条'
# as 给包路径取别名,通过别名访问模块对象属性
>>> import dir1.dir2.mod as md
>>> md.s
'修改梯阅线条'

1.2 python模块all列表

用法

# moda.py
__all__ =['v1','myprint',]

描述

python用from module import *导入模块属性时:

NO 描述
1 模块已定义all列表,则只导入all列表内的属性、方法、类
2 模块未定义all列表,则导入模块的全部顶层属性
3 all写在import语句下面

示例

# E:\\documents\\F盘\\moda.py
import sys
__all__ =['v1','myprint',]
print('模块__all__')
v1 = '梯阅线条'
v2 = 'tyxt.work'

def myprint():
   print(v2)
   
def myecho():
   print(v1)
   
# 在 idle 执行下面示例
>>> import os
>>> path=r'E:\\documents\\F盘'
>>> os.chdir(path)
>>> from moda import *
模块__all__
# 可以访问 __all__ 列表属性
>>> v1
'梯阅线条'
# 不可访问 __all__ 列表外属性
>>> v2
Traceback (most recent call last):
 File "", line 1, in 
   v2
NameError: name 'v2' is not defined
>>> myprint()
tyxt.work
>>> myecho()
Traceback (most recent call last):
 File "", line 1, in 
   myecho()
NameError: name 'myecho' is not defined

1.3 python包all列表

用法

# __init__.py
__all__ = ['dir1moda',]

描述

python用from dir1 import * 导入包模块时:

NO 描述
1 init .py已定义all列表,则只导入all列表内的模块。
2 init .py未定义all列表,则不会自动导入任何模块,只导入包,可以在 init .py手动导入模块。
3 all写在import语句下面

示例

# 目录结构:
# --dir1
# ----__init__.py
# ----dir1moda.py
# ----dir1modb.py
# E:\\documents\\F盘\\dir1\\dir1moda.py
print('在E:\\documents\\F盘\\dir1\\dir1moda.py')
# E:\\documents\\F盘\\dir1\\dir1modb.py
print('在E:\\documents\\F盘\\dir1\\dir1modb.py')
# E:\\documents\\F盘\\dir1\\__init__.py
import sys
__all__ = ['dir1moda',]
print('修改在dir1\\__init__.py')
a = 1
# 在 idle 执行下面示例
>>> import os
>>> path=r'E:\\documents\\F盘'
>>> os.chdir(path)
>>> from dir1 import *
修改在dir1\\__init__.py
在E:\\documents\\F盘\\dir1\\dir1moda.py
# 在 __all__ 列表内的模块被自动导入,可访问
>>> dir1moda.s
'在E:\\\\documents\\\\F盘\\\\dir1\\\\dir1moda.py'
# 非 __all__ 列表内的模块不自动导入,不可访问
>>> dir1modb.s
Traceback (most recent call last):
 File "", line 1, in 
   dir1modb.s
NameError: name 'dir1modb' is not defined
# 修改__init__.py文件:E:\\documents\\F盘\\dir1\\__init__.py,删除__all__
import sys
print('修改在dir1\\__init__.py')
a = 1
# 重启 idle 执行下面示例
>>> import os
>>> path=r'E:\\documents\\F盘'
>>> os.chdir(path)
>>> from dir1 import *
修改在dir1\\__init__.py
# 未定义__all__ ,不自动导入任何模块,不可访问
>>> dir1moda.s
Traceback (most recent call last):
 File "", line 1, in 
   dir1moda.s
NameError: name 'dir1moda' is not defined
>>> dir1modb.s
Traceback (most recent call last):
 File "", line 1, in 
   dir1modb.s
NameError: name 'dir1modb' is not defined
# 修改__init__.py文件:手动导入模块
import sys
from dir1 import dir1moda
print('修改在dir1\\__init__.py')
a = 1
# 重启 idle 执行下面示例
>>> import os
>>> path=r'E:\\documents\\F盘'
>>> os.chdir(path)
>>> from dir1 import *
在E:\\documents\\F盘\\dir1\\dir1moda.py
修改在dir1\\__init__.py
# __init__.py 手动导入模块,可访问
>>> dir1moda.s
'在E:\\\\documents\\\\F盘\\\\dir1\\\\dir1moda.py'
>>> dir1modb.s
Traceback (most recent call last):
 File "", line 1, in 
   dir1modb.s
NameError: name 'dir1modb' is not defined
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • python
    +关注

    关注

    51

    文章

    4678

    浏览量

    83477
  • import
    +关注

    关注

    0

    文章

    15

    浏览量

    1904
收藏 人收藏

    评论

    相关推荐

    python模块安装方法

    空间中,以上功能可写成:#!/usr/bin/python# -*- coding: UTF-8 -*-from hello import World如果要将模块中的所有内容全部导入当
    发表于 04-04 14:57

    什么是python模块和库?

    使用 模块名.变量名 的方式访问这个变量。>>> import demo导入成功>>> demo.name'Python编程时光'在导入模块的时候,有一个非常重要
    发表于 03-09 16:48

    python花式导的八种方法

    。$ python3 -m pip install import_from_github_com这个使用了PEP 302中新的引入钩子,允许你可以从github上引入。这个
    发表于 03-10 16:51

    python常规与命名空间

    python常规与命名空间1. 常规包在 Python 3.3 之前或者说 Python 2 中,一个
    发表于 03-11 15:46

    python 导入的三个冷门知识点

    1. 使用 __all__ 控制可被导入的变量使用 from module import * 默认情况下会导入 module 里的所有变量,若你只想从模块中导入其中几个变量,可以在 m
    发表于 03-14 16:33

    python模块相对导入fromimport介绍1

    无包文件**init**.py下,python通过import module导入模块时,先搜索程序运行主目录。 程序运行主目录为运行的py文件所在目录,而不是执行python.e
    的头像 发表于 02-21 14:15 805次阅读

    python模块相对导入fromimport介绍2

    python2.7先搜索当前包目录,再搜索sys.path模块搜索路径。即先相对再绝对。 本示例在交互模式执行,非文件模式执行。
    的头像 发表于 02-21 14:17 514次阅读

    浅析python模块创建和fromimport使用

    python模块通过用python程序编写的.py文件即可创建,通过fromimport语句导入模块
    的头像 发表于 02-21 14:44 596次阅读

    import模块的导入方法

    import 加载的模块分为四种类型: 使用python编写的代码 .py 文件 已被编译为共享库或 DLL 的C或C++扩展 一组模块的包 使用C编写并链接到
    的头像 发表于 09-11 17:31 805次阅读

    rom…import导入代码介绍

    rom…import导入 基本语法格式如下: from 模块import 成员1,成员2,… 如果希望导入一个模块中的所有成员,则可以采
    的头像 发表于 09-11 17:35 678次阅读

    如何实现__import__()动态导入

    python2和python3中有差异,会导致意外错误. 如果需要动态导入可以使用 importlib 模块 import importliba = importlib.
    的头像 发表于 09-11 17:38 756次阅读

    Isort:自动整理import的超实用工具教程

    ,但也支持格式化Python 2代码。 在使用 isort 格式化你的 import 之前,你的代码可能是长这样的: from my_lib import Object
    的头像 发表于 10-21 10:38 313次阅读
    Isort:自动整理<b class='flag-5'>import</b>的超实用工具教程

    Isort:自动整理 import 的超实用工具教程

    ,但也支持格式化Python 2代码。 在使用 isort 格式化你的 import 之前,你的代码可能是长这样的: from my_lib import Object
    的头像 发表于 10-31 15:09 267次阅读
    Isort:自动整理 <b class='flag-5'>import</b> 的超实用工具教程

    Python import Hook 实现远程导入模块

    所谓的模块 导入,是指在一个模块中使用另一个模块的代码的操作,它有利于代码的复用。 也许你看到这个标题,会说我怎么会发这么基础的文章? 与此相反。恰恰我觉得这篇文章的内容可以算是 Python
    的头像 发表于 11-02 11:45 351次阅读
    <b class='flag-5'>Python</b> <b class='flag-5'>import</b> Hook 实现远程导入<b class='flag-5'>模块</b>

    python如何import自己的模块

    Python中,我们可以通过import语句来引入自己的模块。导入自己的模块可以提高代码的可重用性,使代码更加清晰和易于维护。在本文章中,我们将详细介绍如何导入自己的
    的头像 发表于 11-22 14:57 311次阅读