1. 程式人生 > 其它 >python基礎-模組和包

python基礎-模組和包

1.什麼是python的包

  包就是一個資料夾,裡面放著一個個py檔案或子包;

  在包中可以被呼叫的一個個py檔案,我們叫做模組;

  

  如上,test就是一個包、two.py就是test下的一個模組,child是子包,結構和test包一樣;

  包的身份證

    可以看到test下還有一個__init__.py命名的檔案,是python包中必須存在的檔案,是和普通資料夾的區分標誌、類似包的身份證;

2.包的匯入import

  import package 

  一般用於兩種場景,拿到某包下__init__.py檔案中中的功能或同級模組下的功能;

  

  如上結構,在three.py檔案中可以通過import匯入test/__init__.py中的方法;

# test/__init__.py

def test_init_func():
    print('test_init_func')
# test2/three.py

import test
test.test_init_func()  # test_init_func

  還可以在three.py中匯入同級模組one.py中的功能;

# test2/one.py

def test2_one_func():
    print('test2_one_func')
# test2/three.py

import one
one.test2_one_func()  # test2_one_func

3.模組的匯入from .. import ..

  通過某個包找到對應的模組;from package import module

  3.1 匯入同級包中的某模組

    eg:在main.py中匯入test/two.py模組

    

# test/two.py

def test_two_fun():
    print('test_two_func')
# main.py

# 方式一 仍然使用import
import test.two
test.two.test_two_fun()  # test_two_func
# main.py

# 方式二 使用from...import...

from test import two
two.test_two_fun()  # test_two_func
# main.py

# 也可以直接匯入方法
from test.two import test_two_fun
test_two_fun()  # test_two_func

  此時要匯入模組中的類時,與方法的匯入類似,匯入後例項化一下即可;

# test/two.py

class Two(object):

    @staticmethod
    def test_two_fun():
        print('test_two_func')
# main.py

from test import two
t = two.Two()
t.test_two_fun()  # test_two_func
# 也可以直接匯入類
from test.two import Two

t = Two()
t.test_two_fun()  # test_two_func

# python的模組匯入形式比較靈活,按需使用即可

  3.2 匯入同級包中子包某模組

    eg: 在main.py中匯入test/test2/one.py模組中的方法;

    

# test/test2/one.py

def test_test2_one_func():
    print('列印test_test2_one_func')
# main.py

from test.test2 import one
one.test_test2_one_func()  # 列印test_test2_one_func
# main.py

# 也可以直接匯入函式

from test.test2.one import test_test2_one_func
test_test2_one_func()  # 列印test_test2_one_func

  可以優化下上面from test.test2.one import 的寫法,在test/__init__.py中提前匯入子包;

# test/__init__.py

from .test2.one import test_test2_one_func  # init檔案中匯入同級子包中方法,需使用 .子包名 的方式
# main.py

# 此時可以直接用import方式匯入,書寫上方便的多
import test
test.test_test2_one_func()  # 列印test_test2_one_func

  3.3 匯入同級包中不同子包各自模組

    

    此時main.py中要同時匯入兩個one.py模組;

# test/test2/one.py

def test_test2_one_func():
    print('列印test_test2_one_func')
# test/test3/one.py


def test_test3_one_func():
    print('列印test_test3_one_func')
# main.py

from test.test2 import one as test2_one
from test.test3 import one as test3_one  # 有模組名重複時,為了區分,可以使用as重新命名下

test2_one.test_test2_one_func()
test3_one.test_test3_one_func()
'''
列印test_test2_one_func
列印test_test3_one_func
'''

  同樣也可以藉助init檔案,簡寫呼叫方式;

# test/__init__.py

from .test2.one import test_test2_one_func
from .test3.one import test_test3_one_func
# main.py

from test import test_test2_one_func, test_test3_one_func  # 同一模組匯入多個方法時,可以合併到一行寫
test_test2_one_func()
test_test3_one_func()
'''
列印test_test2_one_func
列印test_test3_one_func
'''

總結