Python中module文件夹里__init__.py的功能
怎么引用模块
环境:win7 + python3.5.2
文档结构:
-project
-data
-src
-filterCorpus.py
-translateMonolingual.py
问题描述:在translateMonolingual.py中引用filterCorpus.py中的函数fun1
from src import filterCorpus
filterCorpus.fun1()
即使translateMonolingual.py和filterCorpus.py在同一文件夹下,若translateMonolingual.py中直接引用import filterCorpus会出错
。这是因为python3需要绝对路径引用,从project的根位置开始指明被引模块的位置。通用格式为:from directory import module 。如果module存在于directory1下的directory2,那么建议写成from directory1.directory2 import module
一般来说,需要引用python模块,可以用如下形式:
import xxx
import xxx as xx
from xxx import xx
比如我们引入numpy模块:
In [21]: import numpy In [22]: numpy
Out[22]: <module 'numpy' from '/home/chia/anaconda2/lib/python2.7/site-packages/numpy/__init__.pyc'>
然后在输入numpy,实际上我们看到,module numpy的路径实际上是一个__init__.pyc的文件。pyc文件是python编译器编译生成的字节码文件。通常py文件改动就会生成一个pyc,如果有pyc存在的话默认用pyc。
python module中的__init__.py文件实际上是执行import命令时访问的文件。换句话说,init的py文件是一个module的指示器。如果一个文件夹里面有这个py文件,那么它就可以被视为一个包,通过import引入,如果没有,则无法引入。
如果我们自己写一些函数,想要当做一个python 的模块通过import导入的话,有两种方式。
- 一种是写成xxx.py文件,然后通过from xxx import xfun
比如:
# this is util.py
def sayHello():
print "Hello"
然后在同一个文件夹中另一个文件中,调用这个模块
# this is main.py
from util import sayHello
这样是可行的。
- 如果写的函数比较多,而且又有不同类别的话,我们就需要把所有的文件和文件中的函数放在一个文件夹中了。那么,这个文件夹里面就要放一个空白的__init__.py
当然,我们说__init__.py只要有就可以,但是它本身是一个py文件,因此可以在里面写一些语句。
比如一个较为重要的变量是 __all__,它一般定义为module中的所有子文件。
比如一个文件夹叫做 utils,其中有a.py, b.py
那么,__all__就可以写成:
__all__ = ['a', 'b']
定义了这个all变量的好处是,我们在进行模糊引入的时候,即:
from utils import *
就可以将所有的子文件import进来,比如我们就可以引用utils.a了。
为什么需要_init_.py
_init_.py文件用于组织包(package)。这里首先需要明确包(package)的概念。什么是包(package)?简单来说,包是含有python模块的文件夹。一个python模块(module)为一个py文件,里面写有函数和类。包(package)是为了更好的管理模块(module),相当于多个模块的父节点。
当文件夹下有_init_.py时,表示当前文件夹是一个package,其下的多个module统一构成一个整体。这些module都可以通过同一个package引入代码中。
_init_.py文件怎么写
可以什么都不写,但如果想使用from package1 import *这种写法的话,需要在_init_.py中加上:
__all__ = ['file1','file2'] #package1下有file1.py,file2.py
引用时使用写法
from package1 import * file1.func1()
Python中module文件夹里__init__.py的功能的更多相关文章
- python 两个文件夹里的文件名对比
比如需要一个xml对应一个jpg时,有时候会不小心少了其中一个文件,这时可以用以下代码比较缺少的是哪个文件: # -*- coding: utf-8 -*- import os path1 = r'. ...
- python导入其他文件夹下的.py文件
想在globalpararm中导入read_config中的类 import sys sys.path.append('..') from common.read_config import Read ...
- python中对文件、文件夹,目录的基本操作
一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法.1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()2.返回指定目录下的所有文件和目 ...
- [转]python中对文件、文件夹的操作——os模块和shutil模块常用说明
转至:http://l90z11.blog.163.com/blog/static/187389042201312153318389/ python中对文件.文件夹的操作需要涉及到os模块和shuti ...
- Java以流的方式将指定文件夹里的.txt文件全部复制到另一文件夹,并删除原文件夹中所有.txt文件
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...
- python中对文件、文件夹的操作
python中对文件.文件夹的操作需要涉及到os模块和shutil模块. 创建文件: 1) os.mknod("test.txt") 创建空文件 2) open(&qu ...
- python 批量创建文件及文件夹(文件夹里再创文件)
python 批量创建文件及文件夹(文件夹里再创文件)思路:文件建到哪>文件名字叫啥>创建文件夹>去新建的文件下>新建文件>给文件里边写东西>写个反馈给控制台> ...
- python遍历文件夹中所有文件夹和文件,os.walk
python中可以用os.walk来遍历某个文件夹中所有文件夹和文件. 例1: import os filePath = 'C:/Users/admin/Desktop/img' for dirpat ...
- python 将指定文件夹中的指定文件放入指定文件夹中
import os import shutil import re #获取指定文件中文件名 def get_filename(filetype): name =[] final_name_list = ...
随机推荐
- 如何通过xstart远程连接桌面
转至:https://www.cnblogs.com/LiuChang-blog/p/12324193.html 1.1.安装依赖包: (1)安装语言包: [root@slave-node2 ~]# ...
- linux中rlwrap安装
转至:https://www.cnblogs.com/hw-1015/p/6601294.html 在linux上使用sqlplus命令的时候,上下键.空格键.删除键都不能使用,非常麻烦.安装了rlw ...
- MyEclipse 启动tomcat本地服务,debug模式,代码一直不同步
今天写代码遇到一个问题,上午还能正常运行的代码,在eclipse中显示正常,但在游览器中就出现了差异,在网上找了很多方法: 1.add and remove项目,清理tomcat部署目录下的项目,清理 ...
- LeetCode-023-合并K个升序链表
合并K个升序链表 题目描述:给你一个链表数组,每个链表都已经按升序排列. 请你将所有链表合并到一个升序链表中,返回合并后的链表. 示例说明请见LeetCode官网. 来源:力扣(LeetCode) 链 ...
- 关于电脑上已安装SqlServer2005再安装SqlServer23008r2的处理情况
安装SqlServer2008r2可参考这个回答,带图很详细 https://xinzhi.wenda.so.com/a/1518683577611182 1.先修改2005注册表.win+R打开运 ...
- 【python】kNN基础算法--推荐系统(辅助研究)
# -*- coding:utf-8 -*- # import numpy as np #import numpy 和from numpy import *是不一样的 # # # import num ...
- tensorflow源码解析之framework-op
目录 什么是op op_def定义 op注册 op构建与注册辅助结构 op重写 关系图 涉及的文件 迭代记录 1. 什么是op op和kernel是TF框架中最重要的两个概念,如果一定要做一个类比的话 ...
- 虚拟内存之后pagefile.sys不断的再增大快占满整个C盘,应该如何将处理?
"pagefile.sys"是页面交换文件,这个文件不能删除,不过我们可以改变其大小和存放位置. 1.右击"这台电脑/属性". 2.然后在对话框的"高 ...
- Java数组(Array)和列表(ArryList)有什么区别?
Array和ArryList的不同点 Array可以包含基本类型和对象类型,ArrayList只能包含对象类型 Array大小是固定的,ArrayList的大小动态变化的 ArrayList提供了更多 ...
- CPU是海王?聊聊 主/子线程 和 同/异步 的关系
最近表弟一直在找实习,经常会问我一些问题,有些问题在没有经历过真实工作时是真的不好理解的,所以我开了这个[表弟专栏],专门为找工作的表弟解决一些疑惑. 这篇文章从计算机发展的角度出发,描述为什么计算机 ...