模組
模組就是把一組相關的函式或**組織到乙個檔案中,即乙個檔案就是乙個模組。模組是由**、類和函式組成的,其中類和函式可以有0個或多個。
新建乙個firstmodule.py,即定義了乙個名為firstmodule的模組。在該模組定義兩個函式和乙個類,並在該類中定義乙個方法,**如下:
# _*_ coding:utf-8 _*_
# 自定義模組
def function_one():
print 'firstmodule function_one()'
def function_two():
print 'firstmodule function_two()'
class firstclass:
def __init__(self):
pass
def first_class_function(self):
print 'firstmodule firstclass first_class_function()'
另外再新建乙個名為ex.py的檔案,在其中輸入如下**,呼叫firstmodule模組的函式和類:
import firstmodule
firstmodule.function_one()
firstmodule.function_two()
firstclass = firstmodule.firstclass()
firstclass.first_class_function()
輸出如下:
firstmodule function_one()
firstmodule function_two()
firstmodule firstclass first_class_function()
模組的匯入
在前面的例子中,我們知道匯入模組需要使用import語句。格式如下:
import module_name
這樣可以匯入乙個模組,要呼叫模組已經定義的函式,需要使用:
module_name.function_name
要呼叫模組中的類,需要建立類的物件,然後再通過類物件呼叫類中的方法。語法格式如下:
class_object=module_name.class_name
class_object.class_function_name
這種方式比較麻煩,每次呼叫模組中的函式或類時,都需要使用模組名作為字首。所以,為了解決這種麻煩,python中的from...import..語句可以將模組中的類或函式匯入,而不需要使用模組名作為字首,格式如下:
from module_name import function_name
注意:雖然這樣減少了**的編寫,但是降低了**的可讀性。
匯入乙個模組下的所有類和函式,可以使用如下語句:
from module_name import *
模組屬性
python中的每個模組都有一些特定的屬性,用於完成某項任務。常用的兩個模組屬性:
1)__name__屬性
__name__屬性用於判斷當前模組是不是程式入口。如果當前程式正在被使用,__name__的值為__main__。
2)__doc__屬性
python中的模組是乙個物件,而每個物件都會有乙個__doc__屬性,該屬性用於描述該物件的作用。
模組的內建函式
python提供了乙個內聯模組-buildin,該模組中定義了許多函式。
function_name:該引數是必須的,表示自定義的函式的名稱。
args:該引數是可選的,它是乙個包含了自定義函式引數的列表和元組。如果不指定該引數,則表示被執行的函式沒有任何引數。
kwargs:該引數是可選的,它是乙個字典型別的引數,字典中的key值為函式的引數名稱,value值為實際引數的值。
下面是乙個例子:
def login(username, password):
message = ''
if(username == 'admin') and (password == 'admin'):
message = 'login success.'
else:
message = 'login error!'
return message
結果:
login success.
2)filter()函式
filter()函式可以對序列做過濾處理,簡單來說就是用函式過濾乙個序列,把序列的每一項傳遞到過濾函式。對自定義函式的引數返回的結果是否為true做過濾,並一次性返回處理結果。如果過濾函式返回的結果為false,那麼該元素將從列表中刪除該項。filter()函式的語法格式如下:
filter(function_name, sequence)
該函式有兩個引數:
function_name:該函式是必須的,它是自定義函式,在函式function_name()中定義過濾的規則。如果function_name()函式的返回值為none,則表示sequence序列中的每一項都為true,從而返回左右的序列元素。
sequence:該引數也是必須的,表示要過濾的序列。
例子:
# _*_ coding:utf-8 _*_
# 驗證使用者名稱的函式validate(), 長度在4-12之間
def validate(username):
if(len(username) > 4) and (len(username) < 12):
return username
# 呼叫filter(), 過濾validate()函式中的元組引數
print filter(validate, ('admin', 'root', 'aaron'))
結果:
('admin', 'aaron')
注意:
filter()中的過濾函式function_name的引數不能為空,否則沒有可儲存sequence元素的變數,function_name()也不能處理過濾。
要想在注釋中使用中文,必須在.py檔案的第一行加上# _*_ coding:utf-8 _*_,否則會報syntaxerror: non-ascii character... 異常。
3)reduce()函式
reduce()函式可以實現連續處理的功能。例如,對某個序列中的元素進行累加操作。reduce()函式的語法格式如下:
reduce(function_name, sequence[ , initial])
reduce()函式有3個引數:
function_name:該引數是必須的,表示自定義的函式名稱,在函式function_name()中實現對引數sequence的連續操作。
sequence:該引數也是必須的,表示待處理的序列。
initial:該引數是可選的,如果指定了該引數的值,則initial所指定的值將首先被傳入function_name()函式中進行計算。如果sequence引數的值為空,則對initial所指定的值進行處理。
例子:
# _*_ coding:utf-8 _*_
# 定義計算兩個數相乘的函式multiply()
def multiply(x, y):
return x*y
# 使用reduce()函式,對元組中的每一項進行計算,最後將結果返回
print reduce(multiply, (1, 2, 3, 4, 5, 6))
print reduce(multiply, (7, 8), 5)
結果:
720
280
第乙個結果為1*2*3*4*5*6連乘的結果。第二個結果為5*7*8的結果。
注意:使用reduce()函式進行累加計算時,必須為reduce()函式中的function_name()函式提供兩個引數,分別對應運算子兩側的運算元。
4)map函式
map()函式可以對多個序列中的每個元素執行相同的操作,並返回乙個與輸入序列長讀相同的列表。其中,每乙個元素都是對輸入序列中相應位置的元素轉換的結果。map()函式的語法格式如下:
map(function_name, sequence[, sequence, ...])
其中引數function_name表示自定義函式的名稱,實現對序列中每個元素的操作。sequence引數表示待處理的序列,該引數可以為多個。如果傳給map()的函式引數接受多個引數,那麼就可以給map()傳遞多個序列,如果這些傳進來的序列長度不一樣,那麼會在短的序列後面補none。函式引數還可以是none,這時就會用序列引數中的元素生成乙個元組的序列。下面是使用map()函式的例項:
def add_one(a):
return a + 1
def add_two(a, b):
return a + b
def add_three(a, b, c):
return a + b + c
a = [1, 2, 3, 4, 5]
b = [1, 2, 3, 4, 5]
c = [1, 2, 3, 4, 5]
result = map(add_one, a)
print result
result = map(add_two, a, b)
print result
result = map(add_three, a, b, c)
print result
結果:
[2, 3, 4, 5, 6]
[2, 4, 6, 8, 10]
[3, 6, 9, 12, 15]
菜鳥學python(02) 基礎筆記整理
兄弟連學python 02 基礎筆記整理 注釋的作用 增加可讀性,排查程式錯誤 兩種 或 或 ctrl 快捷鍵,快速用單行注釋注釋多行 注釋混用問題?單行有多行,多行不能有自己 python 語句 單行語句,塊 變數 可改變,用英文,數字不打頭,用 有意義,不能和系統衝突,區分大小寫 檢視系統關鍵字...
菜鳥學IT之IP基礎
it菜鳥,以後研究的方向是雲計算,從基礎的開始,這是第一篇博文。有不對的地方希望大家指正。ip是網路知識的基礎,今天就開始學習ip。ip位址是由32個二進位制數來表示,為了方便記憶,分成四段8位二進位制,每一段換算成乙個十進位制數,所以每個ip位址由4個十進位制數表示 此文討論的ip位址均為ipv4...
菜鳥學python文件 菜鳥學習python筆記
1.模組 三種呼叫方法 1.在vim寫的乙個python的檔案 運用import 匯入,就可以在互動模式的直接進行呼叫 2.呼叫模組裡面的某個函式 from 模組名字 in 函式名字 3.將模組名字變短進行呼叫 import 模組原名 as 新名字 2.基於python開發的東西存放目錄 usr l...