zoukankan      html  css  js  c++  java
  • Python中module文件夹里__init__.py的功能

    一般来说,需要引用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了。

  • 相关阅读:
    leetcode 6 ZigZag Conversion
    OpenCL异构计算资料收集
    leetcode 21 Merge Two Sorted Lists
    leetcode 226 Invert Binary Tree 翻转二叉树
    leetcode 8 String to Integer (atoi)
    leetcode 27 Remove Element
    【Office】add ins
    【office】deploy
    【Office】add ins manifest
    【设计】交互设计理念
  • 原文地址:https://www.cnblogs.com/morikokyuro/p/13256694.html
Copyright © 2011-2022 走看看