python基礎 模組

2021-10-05 00:27:30 字數 4928 閱讀 8013

from…import 語句

from…import* 語句

搜尋路徑

pythonpath 變數

命名空間和作用域

dir()函式

globals() 和 locals() 函式

reload() 函式

python中的包

python 模組(module),是乙個 python 檔案,以 .py 結尾,包含了 python 物件定義和python語句。

模組讓你能夠有邏輯地組織你的 python **段。

把相關的**分配到乙個模組裡能讓你的**更好用,更易懂。

模組能定義函式,類和變數,模組裡也能包含可執行的**。

例子下例是個簡單的模組 support.py:

def print_func( par ):

print "hello : ", par

return

模組定義好後,我們可以使用 import 語句來引入模組,語法如下:

import module1[, module2[,... modulen]]
比如要引用模組 math,就可以在檔案最開始的地方用 import math 來引入。在呼叫 math 模組中的函式時,必須這樣引用:

模組名.函式名
當直譯器遇到 import 語句,如果模組在當前的搜尋路徑就會被匯入。

搜尋路徑是乙個直譯器會先進行搜尋的所有目錄的列表。如想要匯入模組 support.py,需要把命令放在指令碼的頂端:

#!/usr/bin/python

# -*- coding: utf-8 -*-

# 匯入模組

import support

# 現在可以呼叫模組裡包含的函式了

support.print_func("runoob")

hello : runoob
乙個模組只會被匯入一次,不管你執行了多少次import。這樣可以防止匯入模組被一遍又一遍地執行。

python 的 from 語句讓你從模組中匯入乙個指定的部分到當前命名空間中。語法如下:

from modname import name1[, name2[, ... namen]]
例如,要匯入模組 fib 的 fibonacci 函式,使用如下語句:

from fib import fibonacci
這個宣告不會把整個 fib 模組匯入到當前的命名空間中,它只會將 fib 裡的 fibonacci 單個引入到執行這個宣告的模組的全域性符號表。

把乙個模組的所有內容全都匯入到當前的命名空間也是可行的,只需使用如下宣告:

from modname import *
這提供了乙個簡單的方法來匯入乙個模組中的所有專案。然而這種宣告不該被過多地使用。

例如我們想一次性引入 math 模組中所有的東西,語句如下:

from math import *
當你匯入乙個模組,python 解析器對模組位置的搜尋順序是:

作為環境變數,pythonpath 由裝在乙個列表裡的許多目錄組成。pythonpath 的語法和 shell 變數 path 的一樣。

在 windows 系統,典型的 pythonpath 如下:

set pythonpath=c:\python27\lib;
在 unix 系統,典型的 pythonpath 如下:

set pythonpath=/usr/local/lib/python
變數是擁有匹配物件的名字(識別符號)。命名空間是乙個包含了變數名稱們(鍵)和它們各自相應的物件們(值)的字典。

乙個 python 表示式可以訪問區域性命名空間和全域性命名空間裡的變數。如果乙個區域性變數和乙個全域性變數重名,則區域性變數會覆蓋全域性變數。

每個函式都有自己的命名空間。類的方法的作用域規則和通常函式的一樣。

python 會智慧型地猜測乙個變數是區域性的還是全域性的,它假設任何在函式內賦值的變數都是區域性的。

因此,如果要給函式內的全域性變數賦值,必須使用 global 語句。

global varname 的表示式會告訴 python, varname 是乙個全域性變數,這樣 python 就不會在區域性命名空間裡尋找這個變數了。

例如,我們在全域性命名空間裡定義乙個變數 money。我們再在函式內給變數 money 賦值,然後 python 會假定 money 是乙個區域性變數。然而,我們並沒有在訪問前宣告乙個區域性變數 money,結果就是會出現乙個 unboundlocalerror 的錯誤。取消 global 語句前的注釋符就能解決這個問題。

#!/usr/bin/python

# -*- coding: utf-8 -*-

money = 2000

def addmoney():

# 想改正**就取消以下注釋:

# global money

money = money + 1

print money

addmoney()

print money

#!/usr/bin/python

# -*- coding: utf-8 -*-

# 匯入內建math模組

import math

content = dir(math)

print content;

['__doc__', '__file__', '__name__', 'acos', 'asin', 'atan', 

'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp',

'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log',

'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh',

'sqrt', 'tan', 'tanh']

在這裡,特殊字串變數__name__指向模組的名字,__file__指向該模組的匯入檔名。

根據呼叫地方的不同,globals() 和 locals() 函式可被用來返回全域性和區域性命名空間裡的名字。

如果在函式內部呼叫 locals(),返回的是所有能在該函式裡訪問的命名。

如果在函式內部呼叫 globals(),返回的是所有在該函式裡能訪問的全域性名字。

兩個函式的返回型別都是字典。所以名字們能用 keys() 函式摘取。

當乙個模組被匯入到乙個指令碼,模組頂層部分的**只會被執行一次。

因此,如果你想重新執行模組裡頂層部分的**,可以用 reload() 函式。該函式會重新匯入之前匯入過的模組。語法如下:

reload(module_name)

在這裡,module_name要直接放模組的名字,而不是乙個字串形式。比如想過載 hello 模組,如下:

reload(hello)
包是乙個分層次的檔案目錄結構,它定義了乙個由模組及子包,和子包下的子包等組成的 python 的應用環境。

簡單來說,包就是資料夾,但該資料夾下必須存在init.py 檔案, 該檔案的內容可以為空。init.py 用於標識當前資料夾是乙個包。

考慮乙個在 package_runoob 目錄下的 runoob1.py、runoob2.py、init.py 檔案,test.py 為測試呼叫包的**,目錄結構如下:

test.py

package_runoob

|-- __init__.py

|-- runoob1.py

|-- runoob2.py

#!/usr/bin/python

# -*- coding: utf-8 -*-

def runoob1():

print "i'm in runoob1"

#!/usr/bin/python

# -*- coding: utf-8 -*-

def runoob2():

print "i'm in runoob2"

現在,在 package_runoob 目錄下建立init.py:

#!/usr/bin/python

# -*- coding: utf-8 -*-

if __name__ == '__main__':

print '作為主程式執行'

else:

print 'package_runoob 初始化

然後我們在 package_runoob 同級目錄下建立 test.py 來呼叫 package_runoob 包

#!/usr/bin/python

# -*- coding: utf-8 -*-

# 匯入 phone 包

from package_runoob.runoob1 import runoob1

from package_runoob.runoob2 import runoob2

runoob1()

runoob2()

package_runoob 初始化

i'm in runoob1

i'm in runoob2

如上,為了舉例,我們只在每個檔案裡放置了乙個函式,但其實你可以放置許多函式。你也可以在這些檔案裡定義python的類,然後為這些類建乙個包。

python模組基礎

容器總結 1 n的累加和 def sumton n s 0 for i in range 11 s i return s print sumton 11 print sumton 101 定義類 class people age 1 name 寶寶 def eat self print 我要吃飯!例...

Python 基礎(模組)

模組 你已經看到,你如何通過定義函式,在程式中重複使用 如果你需要重複使用,來自你自己寫的其他程式中的若干函式,怎麼辦?你可能猜到了,答案是模組。有若干撰寫模組的方法,簡單的方法就是建立乙個擴充套件名為 py的檔案。檔案中有函式和有變數。另乙個方法則是,用python源語言寫 比如,你可以用c程式語...

python基礎 模組

模組的有如下優點 1 方便開發 2 方便維護 3 能多次呼叫 模組建立 python中每乙個py檔案就是乙個模組 引入模組的方法 1 import 模組名 python檔名稱 2 import 模組名 as 模組別名 3 引用模組部分內容 a from 模組名 import 函式名 變數名或類名 b...