Python3標準庫學習 二

2021-09-01 06:56:23 字數 3808 閱讀 2037

這個模組包含 python 中使用的內建函式. 一般不用手動匯入這個模組; python會幫你做好一切.

python允許你實時地建立函式引數列表. 只要把所有的引數放入乙個元組中或者字典中

示例**如下:

#-*- encoding:gb2312 -*-

'''created on 2012-5-1

@author: administrator

'''def transimtparams(a,b):

print(a,b)

#python2 的寫法

#使用元組的引數呼叫函式

#使用字典中的引數呼叫函式

#python3 的寫法

#使用元組的引數呼叫函式

transimtparams(*("whither","canada?"))

transimtparams(*(1,2+3))

#使用字典中的引數呼叫函式

transimtparams(*("crunchy",),**)

transimtparams(**)

執行結果:

whither canada?

1 5crunchy frog

crunchy frog

元組引數前面加*號,字典引數前面加**號。

示例:

class rectangle:

def __init__(self, color="white", width=10, height=10):

print("create a", color, self, "sized", width, "x", height)

class roundedrectangle(rectangle):

def __init__(self, **kw):

rectangle.__init__(*(self,),**kw)

rect = rectangle(color="green", height=100, width=100)

rect = roundedrectangle(color="blue", height=20)

執行結果:

create a green <__main__.rectangle object at 0x00bb2e70> sized 100 x 100

create a blue <__main__.roundedrectangle object at 0x00c6e190> sized 10 x 20

如果你寫過較龐大的 python 程式, 那麼你就應該知道 ``import`` 語句是用來匯入外部模組的

(當然也可以使用 ``from-import`` 版本). 不過你可能不知道 ``import`` 其實是靠呼叫內建

函式 ``_ _import_ _`` 來工作的.

通過這個戲法你可以動態地呼叫函式. 當你只知道模組名稱(字串)的時候, 這將很方便.

[example 1-4 #eg-1-4] 展示了這種用法, 動態地匯入所有以 "``-plugin``" 結尾的模組.

====example 1-4. 使用 _ _import_ _ 函式載入模組====[eg-1-4]

import glob, os

modules =

for module_file in glob.glob("*-plugin.py"):

try:

module_name, ext = os.path.splitext(os.path.basename(module_file))

module = __import__(module_name)

except importerror:

pass # ignore broken modules

# say hello to all modules

for module in modules:

module.hello()

注意這個 plug-in 模組檔名中有個 "-" (hyphens). 這意味著你不能使用普通的 ``import`` 命令, 因為 python 的辨識符不允許有 "-" .

[example 1-5 #eg-1-5] 展示了 [example 1-4 #eg-1-4] 中使用的 plug-in .

====example 1-5. plug-in 例子====[eg-1-5]

file: example-plugin.py

def hello():

print "example-plugin says hello"

[example 1-6 #eg-1-6] 展示了如何根據給定模組名和函式名獲得想要的函式物件.

====example 1-6. 使用 _ _import_ _ 函式獲得特定函式====[eg-1-6]

file: builtin-import-example-2.py

def getfunctionbyname(module_name, function_name):

module = __import__(module_name)

return getattr(module, function_name)

print(repr(getfunctionbyname("test-plugin", "hello")))

你也可以使用這個函式實現延遲化的模組匯入 (lazy module loading). 例如在 [example 1-7 #eg-1-7] 中

的 ``string`` 模組只在第一次使用的時候匯入.

====example 1-7. 使用 _ _import_ _ 函式實現 延遲匯入====[eg-1-7]

file: builtin-import-example-3.py

class lazyimport:

def __init__(self, module_name):

self.module_name = module_name

self.module = none

def __getattr__(self, name):

if self.module is none:

self.module = __import__(self.module_name)

return getattr(self.module, name)

string = lazyimport("string")

print(string.ascii_lowercase)

結果:abcdefghijklmnopqrstuvwxyz

import hello

import imp

imp.reload(hello)

imp.reload(hello)

結果:

hello again, and welcome to the show

hello again, and welcome to the show

hello again, and welcome to the show

reload 直接接受模組作為引數.

``` [!feather 注:  ^ 原句無法理解, 稍後討論.]

注意,當你重載入模組時, 它會被重新編譯, 新的模組會代替模組字典裡的老模組. 但是, 已經用原模組裡的類建立的例項仍然使用的是老模組(不會被更新).

同樣地, 使用 ``from-import`` 直接建立的到模組內容的引用也是不會被更新的.

好了,__buildin__的模組就學到這裡,明天學習關於命名空間的模組

Python3標準庫 statistics統計計算

statistics模組實現了很多常用的統計公式,允許使用python的各種數值型別 int float decimal和fraction 來完成高效計算。共支援3種形式的平均值 均值 mean 中值或中位數 median 以及眾數 mode 可以用mean 計算算術平均值。from statist...

Python3標準庫 calendar處理日期

calendar模組第一了calendar類,其中封裝了一些值的計算,如給定的乙個月或一年中的周日期。另外,textcalendar和htmlcalendar類可以生成經過預格式化的輸出。prmonth 方法是乙個簡單的函式,可以生成月的格式化文字輸出。import calendar c calen...

python3 標準型別

number 數字 string 字串 list 列表 tuple 元組 sets 集合 dictionary 字典 python3 支援 int float bool complex 複數 1 python可以同時為多個變數賦值,如a,b 1,2。2 乙個變數可以通過賦值指向不同型別的物件。3 數...