Python的import详解

这篇具有很好参考价值的文章主要介绍了Python的import详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Python的import详解

1、import包导入有四种情况

(1)本级目录内导入
(2)上级目录导入下级目录
(3)下级目录导入上级目录
(4)同级目录之间导入

python中import 和 from import 的区别:

import 语句导入整个模块内的所有成员(包括变量、函数、类等)。
from import 只导入本语句指定的成员。
from xxx import * 导入模块时,与 import 等价。
from xxx import * 导入模块时,默认为导入模块中所有不以下划线开头的程序单元。

2、目录结构

.
├── pack1
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-37.pyc
│   │   ├── run1.cpython-37.pyc
│   │   └── run2.cpython-37.pyc
│   ├── run1.py
│   ├── run2.py
│   ├── samedir.py
│   └── upper.py
├── pack2
│   ├── __init__.py
│   ├── parallel.py
│   ├── __pycache__
│   │   ├── __init__.cpython-37.pyc
│   │   └── run3.cpython-37.pyc
│   ├── run3.py
│   └── run4.py
├── __pycache__
│   └── root_pack.cpython-37.pyc
├── root_pack.py
└── root.py

3、本级目录内导入

直接import本级目录的文件即可。samedir.py导入run1.py 。
run1.py如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

def run1():
   print ("I'm running package 1")

def test_run1():
   print ("I'm running package test_run1")

本级目录调用,samedir.py

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import run1 
run1.run1()
run1.test_run1()

import run1 as r1
r1.run1()
r1.test_run1()

执行结果:

# python samedir.py 
I'm running package 1
I'm running package test_run1
I'm running package 1
I'm running package test_run1

import run1 as r1
简化输入,用r1调用两个函数

4、上级目录导入下级目录

从上级目录导入下级目录的文件,需要下级新建一个的__init__.py文件 ,导入时首先执行init文件。

通常__init__.py 文件为空,但是还可以为它增加其他的功能。导入一个包时,实际上是导入了它的__init__.py文件。这样我们可以在__init__.py文件中批量导入程序所需要的模块,而不再需要一个一个的导入。

import sys
sys.path.append("..") 

是为了可以从下级导入上级目录。

if name == ‘main’:
是为了测试导入的执行效果

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
sys.path.append("..") 

if __name__ == '__main__':
    print ('main is running')
else:
    print ('package 1 init')

root_pack.py

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 导入 Python 包
import pack1.run1 as t1
import pack2.run3 as t3

t1.run1()
t1.test_run1()

t3.run3()
t3.test_run3()

执行效果如下:

# python root.py
package 1 init
package 2 init
I'm running package 1
I'm running package test_run1
I'm running package 3
I'm running package test_run3

说明:

package 1 init
package 2 init
是导入时,首先执行的是init.py文件,对于同一个包,多次导入,只执行一次init.py 。

5、下级目录导入上级目录

从pack1目录下upper导入上级目录的root_pack.py .

root_pack.py :

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
def root_pack():
   print ("I'm running package root")

def root_run():
   print ("I'm running package root_run")

需要导入上级目录下模块,使用sys.path ,增加路径。  
upper.py :

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys 
sys.path.append("..") 
 
import root_pack

root_pack.root_pack()
root_pack.root_run()

执行效果:

# python upper.py 
I'm running package root
I'm running package root_run

6、同级目录之间导入

parallel.py 在pack2目录下,调用pack1目录下的程序。
parallel.py也需要增加上级目录

import sys 
sys.path.append("..") 

parallel.py如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys 
sys.path.append("..") 
 
from pack1 import run1
from pack1 import run2 as r2

run1.run1()

r2.run2()
r2.test_run2()

执行结果:文章来源地址https://www.toymoban.com/news/detail-505593.html

# python parallel.py 
package 1 init
I'm running package 1
I'm running package 2
I'm running package test_run2

到了这里,关于Python的import详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 用Python编写UI自动化用例第一步from selenium import webdriver,即导入第三方驱动包时报错,高效解决办法,报错问题已解决

    问题:在PyCharm中新建一个文件,py01_test_01.py文件。编写UI自动化用例的第一步就是导入驱动(from selenium import webdriver),在已经安装selenium的情况下(pip install selenium==3.141.0),执行的时候还是报错。如下图:     原因排查过程:从报错信息,错误信息为没有找到selenium。首先查

    2024年02月12日
    浏览(67)
  • import()动态导入

    是JavaScript ES2019中新增的语法特性,它可以通过将代码按需导入,从而实现更加 高效的加载方式 。动态导入允许用户在运行时动态地加载模块,这是ES6中静态导入所无法实现的。 在实际运用当中,我们可以通过导入语法结合 WebPack 等打包工具,来构建出一个按需加载的前端

    2024年02月16日
    浏览(35)
  • Javascript 模块导入导出(import export)

    笔者开始学习 Javascript 的时候,对模块不太懂,不知道怎么导入模块,导出模块,就胡乱一通试 比如 import xx from \\\'test.js\\\' 不起作用,就加个括号 import {xx} from \\\'test.js\\\' 反正总是靠蒙,总有一种写法是对的,其实还是没有理解,还是不懂 尤其是在当初写 www.helloworld.net 网站的时候

    2024年02月05日
    浏览(37)
  • 【IOS】import导入模块或头文件错误

    xcode运行ios项目时编译报错@import的导入模块或头文件的时候报错not found 所有出现import失败的地方所引入的头文件或模块都是在项目中存在的,not found的共同特点是 引入的都是重定向形式 的。 例如: 原本的framework里的headers本应该是一个头文件的集合文件夹,但是实际上fra

    2024年02月20日
    浏览(41)
  • 开发工具Eclipse的使用之导入项目(import)

    接下来看看由辉辉所写的关于Eclipse使用的相关操作吧 目录 🥳🥳Welcome Huihui\\\'s Code World ! !🥳🥳 一.导读 二.详细操作步骤   1.右击项目处,点击import  2.选择所要导入的项目所在路径  3.导入项目完毕之后,需要检查是否有错误  4.若报错,则检查配置的文件是否出现了问题

    2024年02月13日
    浏览(47)
  • idea导入import javax.servlet.http.HttpServletRequest;爆红

    1、问题描述: 2、解决办法: 第一步: 选中左侧项目 → 右键 → 选择 Open Module Settings  第二步: 在 Project Structure 窗口, 选择左侧的 Modules ,在选中中间的项目,点击右侧的+号,选择Library 第三步: 在Choose Libraries 窗口,选择New Library... ,在下拉框选择Java 第四步: 在Selec

    2024年02月11日
    浏览(37)
  • 为什么defineProps宏函数不需要从vue中import导入?

    我们每天写 vue 代码时都在用 defineProps ,但是你有没有思考过下面这些问题。为什么 defineProps 不需要 import 导入?为什么不能在非 setup 顶层使用 defineProps ? defineProps 是如何将声明的 props 自动暴露给模板? 我们来看几个例子,分别对应上面的几个问题。 先来看一个正常的例

    2024年03月13日
    浏览(44)
  • Android Studio Import Module 选择 OpenCV 时,无法导入的解决方法

    在 Android Studio 工程中,导入 OpenCV 库时,采用 “New == Import Module” 导入时,发现无法导入,具体现象如下图所示,“Finish” 和 “Next” 按钮始终是灰色的。换了好几个其他不同的 OpenCV 库版本,还是一样的情况,定位到 sdk/java 目录下,也无法导入。 参考了这篇文章: 链接

    2024年02月21日
    浏览(61)
  • 【异常】JDK11提示 import javax.annotation.Resource;报红,无法导入 Resource这个包

    在导入SpringBoot项目之后,import javax.annotation.Resource; 报红,无法导入 Resource这个包 导入新项目,idea的默认jdk版本是内建的11版本,语言编译级别是11。在JDK11版本以后,移除了javax扩展 ,javax.annotation这个包被移除了,所以无法使用@Resource注解。 把项目jdk切换到系统环境的jdk

    2024年02月13日
    浏览(47)
  • VScode import导入自己的模块文件路径错误ModuleNotFoundError: No module named ‘v0‘

    VScode的python报错 ModuleNotFoundError: No module named ‘v0’ 我的工作区文件夹打开的是server,文件相对路径是: server/v0/train_ddpg.py,其中的部分导入import代码如下,v0是上一级文件夹 from v0.cli import cli_train from v0.config import config_dict 不想修改代码,因为需要改的地方太多了,而只通过

    2024年02月04日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包