1. 程式人生 > >python's twenty eithth day for me 模塊和包

python's twenty eithth day for me 模塊和包

print 直接 col 創建 包含 pan size 內置模塊 UNC

模塊:

  什麽是模塊:

    常見的場景:一個模塊就是一個包含了python定義和聲明的文件,文件名就是模塊名字加上.py的後綴,但其實import加載的模塊分為四個通用類別:

    1,使用python編寫的代碼(.py文件)

    2,以被編譯為共享庫或DLL的C或C++擴展。

    3,包好一組模塊的包。

    4,使用C編寫並鏈接到python解釋器的內置模塊。

import:

  import 模塊名:

    1,導入一個模塊。

    2,相當於這個模塊從上到下一次被執行了。

    3,同一個模塊不會被多次導入。

import my_module
# 使用模塊中的屬性或方法時:模塊名.方法名()  模塊名.屬性名
print(my_module.money) # 100 # 使用模塊中的屬性名或方法名。 my_module.func() # 1

  1,import my_module 模塊,首先創建一個屬於my_module的內存空間

  2,加載my_module模塊中的所有代碼

  3,將my_module模塊中的名字方法放在my_module的命名空間中

import...as...:將...模塊導入命名為...

import my_module as m
print(m.money)  # 100
m.func()    # 1
inp = input(json or pickle >>>
) if inp == json: import json as m elif inp == pickle: import pickle as m dic = {k:v} print(m.dumps(dic)) print(m.loads(m.dumps(dic)))

import 可一次導入多個模塊:不推薦使用。

import hashlib,json,pickl

python PEP8規範:

  1,每一行 import 應該導入一個模塊。

  2,如果不是必要的需求,所有的模塊都應該在文件的頂端導入。

  3,關於導入模塊的順序,先導入內置的,再導入擴展,最後導入自定義。

導入模塊是將模塊放入到 sys.modules 中,使用變量的時候看的是全局命名空間globals().

import sys
import my_module
print(globals())
print(sys.modules)

from 模塊名 import 方法名或者屬性名:

  1,導入的名字直接屬於全局,但是指向模塊的名字所在的內存空間

  2,導入的名字如果是是函數或者方法,引用了全局的變量,仍然使用模塊中的變量

  3,導入的名字和全局的名字是一樣的,誰最後搶占到就是誰的

from my_module import money,func
# 這種導入就不能使用模塊名.屬性名或方法名了,否則會報錯。
# 這樣導入的屬性或者方法名就屬於全局變量,可直接調用。
print(money)    # 100  此時是模塊局部中的money
money = 999
print(money)    # 999   先加載模塊中的money,然後加載本全局變量中的money會將模塊中的覆蓋
fu

nc() # 100 # 用到的變量仍然是局部的變量。

技術分享圖片

from 模塊 import * : 默認會把模塊中所有名字都導入到全局:

from my_module import *
print(money)
func()

* 和 __all__配合使用:在被導入模塊中如果有__all__ = [‘屬性名’,‘方法名’],則只能調用__all__列表中擁有的名字。其他的都不可調用。

python's twenty eithth day for me 模塊和包