NJU1healer的个人博客分享 http://blog.sciencenet.cn/u/NJU1healer

博文

Python中导入模块方式汇总及执行注意

已有 2988 次阅读 2020-8-30 11:15 |个人分类:Python|系统分类:科研笔记

(一)当前文件夹和不同文件夹下模块的导入

(1)主程序和模块ma(模块(Module)“*.py” 文件)在同一个文件夹

import ma 

(2)主程序和ma模块在不同文件夹下

# 1.如果a文件夹所在目录在环境变量,a文件夹中的ma模块可以被以下方式导入

import a.ma  |  from a import ma 


# 2.如果a文件夹所在目录在环境变量,a文件夹中的b文件夹的mb模块可以被以下方式导入

import a.b.mb  |  from a.b import mb


# 3.如果a文件夹所在目录在环境变量,a文件夹中的b文件夹的mb模块中的bbb名字要被直接导入 

import a.b.mb.bbb  # 错误:所有.左侧必须是文件夹 *****

from a.b import mb.bbb # 错误:所有.左侧必须是文件夹

from a.b.mb import bbb # 正确


# 4.如果当前执行文件夹子目录,需要导入父目录下的文件,需要设定如下:

import sys, os

sys.path.append(os.pardir)  # 为了导入父目录的文件而进行的设定

import numpy as np

import pickle

from dataset.mnist import load_mnist  # dataset文件夹下的mnist.py中的函数load_mnist

image.png

(二)模块及其两种被执行方式

(1)模块

       Python中有内置的模块和来自第三方的模块。所以,模块分为三类:a.Python标准库 b.第三方模块 c.应用程序自定义模块。

       使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别在不同的模块中,因此,我们自己在编写模块时,不必要考虑名字会与其他模块冲突。但是也要注意,尽量不要与内置函数名字冲突。

       特别注意:如果模块是被导入, __name__ 的值为模块名字,如果模块是被直接执行, __name__ 的值为 '__main__' 。


       模块是对象, 并且所有的模块都有一个内置属性 __name__ 。一个模块的 __name__ 的值要看您如何应用模块。如果 import 模块, 那么 __name__ 的值通常为模块的文件名, 不带路径或者文件扩展名。但是您也可以像一个标准的程序一样直接运行模块, 在这种情况下 __name__ 的值将是一个特别的缺省值, __main__ 。

import odbchelper

odbchelper.__name__

>>> 

'odbchelper'


(2)模块的两种被执行方式总结

# 总结: 

# 1.一个py文件作为自执行文件,__name__变量的值为 '__main__'

# 2.一个py文件作为模块被导入执行,__name__变量的值为 '文件(模块)名'


# 如何区别两种方式,可以让一个文件可以自执行,也可以被导入执行 共存!可以在这样的py文件中写:

if __name__ == '__main__':

    # 自执行的逻辑 => 因为在文件作为模块使用时 __name__为文件名,不满足条件

    pass

具体例子:https://blog.csdn.net/u011508527/article/details/46582805

                 https://blog.csdn.net/qq_33254870/article/details/81668297

(三)包

# 包:一系列模块的集合体,用文件夹来管理一系列有联系功能的模块,该文件夹我们称之为包,文件夹名就是包名!


# 包 与 普通文件夹存在区别:包的文件夹中一定存在一个__init__.py文件

#        -- py2:必须创建  py3:建议创建,不创建系统会自动创建


# __init__.py文件

# 1)产生一个全局名称空间,提供给包的,就代表包的名称空间

# 2)管理 包可以直接点出来使用的 名字


# 导包完成的三件事

# 1)编译形成包中__init__.py文件的pyc文件

# 2)执行__init__.py文件,形成一个全局名称空间,将__init__.py文件中所有名字存放其中,该名称空间就代表包的名称空间

# 3)在导包的文件中,产生一个与包名相同的名字,指向包的名称空间(__init__.py文件的全局名称空间)

点滴分享,福泽你我!Add oil!

(四)import和from import的总结

import module导入模块:语句执行完后会创建一个新的命名空间,在该命名空间中执行相应的函数。执行时,需要的变量、函数和类名前需要加 前缀 “模块名.”或“别名.”

from module import *导入模块:是将模块的定义导入到当前的命名空间,此时不需要前面加前缀。

有包时:

import 包名.模块名:需要前缀 包名.模块名;

from 包名 import 模块名:使用时不需要带包名,但需要带模块名;

from 包名.模块名 import *:直接使用函数,变量名即可;


具体执行案例:

import os,sys,time       #我们可以同时导入多个模块,不建议这样干,可读性差!

import logging as log     #模块起别名

from os import chown,chmod       #只导入os模块中的部分变量。推荐使用这种方法

from module1 import *    #将module1模块中所有的数据都导入到内存,不建议这样干!

【参考】

https://www.cnblogs.com/tingguoguoyo/p/10834393.html

https://www.cnblogs.com/josie-xu/p/10456932.html




https://blog.sciencenet.cn/blog-3428464-1248508.html

上一篇:Python:loc和iloc的区别
下一篇:[转载]Python中的_, __, __xx__ 区别
收藏 IP: 211.162.81.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

全部作者的其他最新博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-24 07:39

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部