||
(一)当前文件夹和不同文件夹下模块的导入
(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
(二)模块及其两种被执行方式
(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
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-24 07:39
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社