Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python import 【总结】

Python import 【总结】

作者头像
py3study
发布于 2020-01-10 03:38:25
发布于 2020-01-10 03:38:25
7690
举报
文章被收录于专栏:python3python3

Python import总结

1 前言

可能网上很多文章或博客都没解释清楚,作者自己也苦心于Python的import。至此,把自己的总结的分享给大家,本文不做基础讲解,仅说明疑惑的地方。

新版本的Pycharm 2017.1.1,对自己定义的模块都有提示,写代码的提示(如方法,变量)。

2 目录

3 本质

import的本质,针对包和模块来说,对于版本Python2和Python3来说,意义一样的,仅拿Python2做实验说明,Python3不做赘述。Python2版本Python2.7.13,Python3版本Python3.6.1.

3.1 模块

导入模块的本质是把python文件解释和执行一遍。

test.py

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

print("I am test module.")

下面在同级目录TestImport.py中导入该模块:

TestImport.py文件如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

import os,sys

import test

执行命令:

C:\Python27\python.exeC:/Users/Administrator/PycharmProjects/Foundation/FuckImp/TestImport.py

I am test module.

3.2 包

导入包的本质是执行包下的__init__.py文件。

dir1/__init__.py文件如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

print("I am dir1package.")

TestImport.py文件如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

import os,sys

import dir1

执行命令:

C:\Python27\python.exeC:/Users/Administrator/PycharmProjects/Foundation/FuckImp/TestImport.py

I am dir1 package.

4 说明

4.1 导入模块

普通导入import test,模块下的全部对象全部导入,这里不做说明;下面是对模块进行对象的限制导入说明。

test.py文件如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

__all__=["A","printInfo"]

A = "Python"

B = "Java"

C = "Php"

def printInfo():

print("I am test module.")

TestImport.py文件如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

import os,sys

import test

# from test import *

print(test.A)

print(test.B)

print(test.C)

test.printInfo()

执行python:

C:\Python27\python.exeC:/Users/Administrator/PycharmProjects/Foundation/FuckImp/TestImport.py

Python

Java

Php

I am test module.

发现所有对象都导入了。

使用from x import *导入:

TestImport.py文件如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

import os,sys

# import test

from test import *

print(A)

print(B)

print(C)

printInfo()

执行命令:

C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/Foundation/FuckImp/TestImport.py

Python

Traceback (most recent call last):

  File"C:/Users/Administrator/PycharmProjects/Foundation/FuckImp/TestImport.py",line 10, in <module>

    print(B)

NameError: name 'B' is not defined

注释掉__all__中没有的对象,如下:

TestImport.py文件如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

import os,sys

# import test

from test import *

print(A)

# print(B)

# print(C)

printInfo()

执行命令:

C:\Python27\python.exeC:/Users/Administrator/PycharmProjects/Foundation/FuckImp/TestImport.py

Python

I am test module.

总结:模块中__all__对对象的限制,仅对fromimport有效,对import无效

4.2 Python2

4.2.1 导入包

在__init__.py文件中,直接import该包下的模块。

导入dir1包:

dir1/__init__.py文件如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

'''

1.这个文件在导入包时,确实会被执行;

'''

import test11

import test12

TestImport.py文件如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

import os,sys

import dir1

dir1.test11.printInfo()

dir1.test12.printInfo()

执行命令:

C:\Python27\python.exeC:/Users/Administrator/PycharmProjects/Foundation/FuckImp/TestImport.py

I am test11.

I am test12.

在__init__.py文件中,定义__all__导入:

导入dir1包:

dir1/__init__.py文件如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

'''

1.这个文件在导入包时,确实会被执行;

'''

__all__=["test11","test12"]

TestImport.py文件如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

import os,sys

from dir1 import *

test11.printInfo()

test12.printInfo()

执行命令:

C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/Foundation/FuckImp/TestImport.py

I am test11.

I am test12.

Python2中用from package import*可导入package下__init__.py文件限制的模块。将解释器切换至Python3,发现也可正常执行。

在__init__.py文件中,使用相对路径导入:

dir1/__init__.py文件如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

'''

1.这个文件在导入包时,确实会被执行;

'''

from . import test11

from . import test12

TestImport.py文件如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

import os,sys

import dir1

# from dir1 import *

dir1.test11.printInfo()

dir1.test12.printInfo()

或者

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

import os,sys

# import dir1

from dir1 import *

test11.printInfo()

test12.printInfo()

上述Python都能正常运行在Python2中,切换python解释器3,发现也能正常运行。

4.3 Python3

导入dir1包:

dir1/__init__.py文件如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

'''

1.这个文件在导入包时,确实会被执行;

'''

import test11

import test12

TestImport.py文件如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

import os,sys

import dir1

dir1.test11.printInfo()

dir1.test12.printInfo()

执行命令:

C:\Python36\python.exeC:/Users/Administrator/PycharmProjects/Foundation/FuckImp/TestImport.py

Traceback (most recent call last):

  File"C:/Users/Administrator/PycharmProjects/Foundation/FuckImp/TestImport.py",line 6, in <module>

    import dir1

  File"C:\Users\Administrator\PycharmProjects\Foundation\FuckImp\dir1\__init__.py",line 8, in <module>

    importtest11

ModuleNotFoundError: No module named 'test11'

总结:包中__init__.py文件中直接importmodule,调用该包时,Python2中能正常运行,Python3中却异常报错。

5 总结

  1. 针对模块导入,模块中可采取__all__限制from moduleimport *导入的对象,模块的导入Python2和Python3并没有差异,都不会抛出异常;
  2. 针对的导入,Python2中包下__init__文件可直接import对应包下的模块,Python3不能这样导入,需使用相对路径导入(from . import module),而相对路径导入的方法对Python2和Python3都有效;
  3. 针对的导入,Python2中包下__init__文件中使用__all__限制frompackage import *对象时,对Python2和Python3都有效;
  4. 针对从包来导包的导入,例如本例。

下面是dir1下的__init__文件

#!/usr/bin/env python # -*- coding:utf-8 -*- # author: Changhua Gong ''' 1.这个文件在导入包时,确实会被执行; ''' from . import test11 from . import test12

交互式环境

C:\Users\Administrator\PycharmProjects\Foundation>python  顶级目录

>>> from FuckImp import dir1

>>> dir1.test11.printInfo()  # 加上包名就可调用了

I am test11.

在python项目中

         TestImp.py如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

from FuckImp import dir1

dir1.test11.printInfo()# 加上包名就可调用了

运行

C:\Python27\python.exeC:/Users/Administrator/PycharmProjects/Foundation/FuckImp/TestImport.py

I am test11.

Python2和Python3一样有效

  1. 当import后是package或module时,调用对应的对象时,需加上pkg.module.object或module.object, 如from x import *,可直接调用x下的对象。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/08/17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python基础-Python基础使用
上篇文章 Python基础-初识Python 我们已经知道了什么是Python,Python的用处、和Python的解释器、Python的安装,这篇文章,我们主要讲Python的使用入门
py3study
2020/01/07
7530
Python基础-Python流程控制
上篇文章 Python基础-基础使用 我们已经知道了Python解释器,Python的变量、和Python的输入输出、Python的注释和字符集,这篇文章,我们主要讲Python的流程控制
py3study
2020/01/08
5450
Python基础
Python的官方版本,使用C语言实现,使用最为广泛,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上。
用户7678152
2020/09/18
4340
python导入模块--import--2
在跟之前test_import_color_print.py同级目录下创建testimport.py文件,不然导模块会有问题
py3study
2018/08/02
6130
Python中import机制
Python语言中import的使用很简单,直接使用import module_name语句导入即可。这里我主要写一下”import”的本质。
全栈程序员站长
2022/09/07
2670
4.Python3基础入门学习笔记(四)
描述:模块就是更高级的封装,而模块就是程序;实际就是将一个个python文件编写的函数导入到其他的py文件中进行调用;
全栈工程师修炼指南
2022/09/28
3800
Python随笔(三)、python基础
"#1":{ 'hostname':c1, 'cpu_count': 2, 'mem_capicity': 80 },
py3study
2020/01/08
3960
Python随笔(三)、python基础
python3 day7
    choice1=input('Pls input the province: ').strip()
py3study
2020/01/03
2970
Python 多进程 多线程数据共享
#!/usr/bin/env python # -*- coding:utf-8 -*- # author: Changhua Gong from multiprocessing import Process, Queue import os, time, random ''' 1. 我们平时from queue import Queue是线程对列,用于数据共享的,只能在线程之间进行使用; 2. from multiprocessing import Queue,是进程对列,用于进程间数据交换,实际中是在进
py3study
2020/01/09
8440
python基础编程题[Python爬虫]
  Python的官方版本,使用C语言实现,使用最为广泛,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上。
Java架构师必看
2022/03/14
5760
python基础编程题[Python爬虫]
python之初接触
             1:开发效率从低到高 2:执行效率从高到低 3:掌握难度从难到易
全栈程序员站长
2022/07/21
4010
python之初接触
Python随笔(一)、python基础
在File---settings---File and Code Templates---Python script 脚本里添加:
py3study
2020/01/08
4050
Python 插件式程序设计与开发实践总结
如上,以user.py为程序入口脚本,运行该脚本时,需要创建一个user类对象,执行一系列动作(包含一系列动作的列表)。程序执行动作前,要求先获取动作名称,根据该名称,执行不同的操作。这些操作,对应不同的类函数。
授客
2021/01/05
7790
Python 插件式程序设计与开发实践总结
Python之路,Python基础篇(第
一、Python介绍: python的创始人为吉多·范罗苏姆(Guido van Rossum),俗称龟叔。在圣诞节期间为打发无聊而开发得语言。 Python是一门什么语言: Python是一门解释性的语言 Python的优缺点: Python语言,优雅、明确、简单,虽然不如C或JAVA语言快,但并不影响它得正常使用。 Python解释器: Python默认使用的解释器是CPython,C语言开发得。 Python发展史: Python2.x 版本只支持到2020年,Python2.7是个过渡版本,
py3study
2020/01/15
4920
Python随笔(四)、python基础
05 python s12 day4 迭代器原理及使用 什么是迭代: 可以直接作用于for循环的对象统称为可迭代对象(Iterable)。* 可以被next()函数调用并不断返回下一个值的对象称为迭代器(Iterator)。 所有的Iterable均可以通过内置函数iter()来转变为Iterator。 对迭代器来讲,有一个next()就够了。在你使用for 和 in 语句时,程序就会自动调用即将被处理的对象的迭代器对象,然后使用它的next()方法,直到监测到一个StopIteration异常。
py3study
2020/01/08
3370
Python随笔(四)、python基础
python中的import,reloa
import 作用: 导入/引入一个python标准模块,其中包括.py文件、带有__init__.py文件的目录。
py3study
2020/01/08
7770
python import 与 from
模块其实就一些函数和类的集合文件,它能实现一些相应的功能,当我们需要使用这些功能的时候,
py3study
2020/01/14
5360
python中import星_Python imports 指北
声明:如果你每天写Python,你会发现这篇文章中没有新东西。 这是专为那些像运维人员等偶尔使用Python的人以及那些忘记/误用python import的人写的。 尽管如此,代码是用Python 3.6类型注释编写的,以满足有经验的Python读者。 像往常一样,如果你发现任何错误,请告诉我!
用户7886150
2020/12/31
1.2K0
Python|模块,包,标准模板
01 .py文件-模块 一个.py文件就称之为一个模块,Module,模块使用的最大好处是大大提高了代码的可维护性。 当然,还提高了代码的复用性。 使用模块还可以避免函数名和变量名冲突,相同名字的变量完全可以分别存在不同的模块中。 但是也要注意,变量的名字尽量不要与内置函数名字冲突。 常见的内置函数:https://docs.python.org/3/library/functions.html 02 包 当编写的模块多了,模块的名字重复的概率就增加了。如何解决这个问题呢? Python引入了按目录
double
2018/04/02
9470
python 模块
这打印的,就是python的全局环境变量。这里面都是路径,路径里面存的都是什么呢?就是python导入一个库或者python内部自己进行调用的时候,它就在这些路径里面去找。
py3study
2018/08/02
1K0
相关推荐
Python基础-Python基础使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档