为什么要用模块

如果一个文件中,有同名的函数

def hello():
    print('hello, ITFun!')


def hello():
    print('goodbye, ITFun!')


hello()

下面的会把上面的覆盖,这时候可以用模块来处理

模块的使用

module1.py

def hello():
    print('hello, ITFun!')

module2.py

def hello():
    print('goodbye, ITFun!')

hello.py

1. import

import module1
import module2

module1.hello()
module2.hello()

2. as

定义别名

import module1 as m1
import module2 as m2


m1.hello()
m2.hello()

3. from ... import ...

在模块中,导入 ...

from module1 import hello as h1
from module2 import hello as h2

h1()
h2()

4. from … import *

导入所有内容

from module1 import *

hello()

直接运行模块文件 __main__

module1.py

def hello():
    print('hello, ITFun!')


hello()

hello.py

import module1

如果这样,在引用进来的时候,hello 函数就会运行。 如果不想一引用就执行,而是运行 python module1.py 才会运行,可以改为

module1.py

def hello():
    print('hello, ITFun!')


if __name__ == '__main__':
    hello()

只有直接执行的模块的名字才是 __main__,所以在引用时,并不会执行。

模块中的 __all__

module1 中

__all__ = ["hello1", "hello2"]


def hello1():
    print("hello1")


def hello2():
    print("hello2")


def hello3():
    print("hello3")
from module1 import *

hello1()
hello2()
# hello3()

如果一个文件中有 __all__ ,那么也就意味着 from xxx import * 只会导入 __all__ 中的元素