日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python封装函数、实现将任意的对象序列化到磁盘上_Python系列之lambda、函数、序列化...

發布時間:2025/3/19 python 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python封装函数、实现将任意的对象序列化到磁盘上_Python系列之lambda、函数、序列化... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

lambda

在python中使用lambda來創建匿名函數,而用def創建的方法是有名稱的,除了從表面上的方法名不一樣外,python lambda還有哪些和def不一樣呢?

1 python lambda會創建一個函數對象,但不會把這個函數對象賦給一個標識符,而def則會把函數對象賦值給一個變量。

2 python lambda它只是一個表達式,而def則是一個語句。

下面是python lambda的格式,看起來好精簡:

lambda x: print(x)

下面舉幾個例子:

def su(func):

return func +2

for x in range(10):

ret = su(x)

#------------------------------------# 兩個例子輸出的結果是一樣的[2,3,4,5,6,7,8,9,10,11]

g = lambda x:x+2

info = [g(x) for x in range(10)]

可以看出lambda確實很簡單!

函數

曾多次提到函數,函數到底是什么東東,那我們就一探究竟。首先先說下 為什么要用函數?

函數是組織好的,可重復使用的,用來實現單一,或相關聯功能的代碼段.函數能提高應用的模塊性,和代碼的重復利用率。

定義函數:

函數代碼塊以?def?關鍵詞開頭,后接函數標識符名稱和圓括號()。

任何傳入參數和自變量必須放在圓括號中間。圓括號之間可以用于定義參數。

函數的第一行語句可以選擇性地使用文檔字符串—用于存放函數說明。

函數內容以冒號起始,并且縮進。

return [表達式]?結束函數,選擇性地返回一個值給調用方。不帶表達式的return相當于返回 None。

語法:

def functionname( parameters ):

function_suite

return [expression]

返回值

def foo(func):

return func + 1 #return,表示函數的返回值

python 函數返回值有兩種形式:

返回一個值。

返回多個值。

默認返回None。

參數

必備參數 :?必備參數須以正確的順序傳入函數。調用時的數量必須和聲明時的一樣

關鍵字參數: ?關鍵字參數和函數調用關系緊密,函數調用使用關鍵字參數來確定傳入的參數值。

默認參數 ?:調用函數時,缺省參數的值如果沒有傳入,則被認為是默認值。

不定長參數: 函數能處理比當初聲明時更多的參數

#必備參數

def foo(func):

print(func)

foo('hello') #hello

#關鍵字參數

def foo(func):

print(func)

foo(func = 'hello') #hello

#缺省參數

def printinfo( name, age = 35 ):

print("Name: ", name)

print("Age ", age)

printinfo( age=50, name="miki" ) #Name: miki,Age 50

printinfo( name="miki" ) #Name: miki,Age 35

#不定長參數

def functionname(*args,**kwargs):

print('輸出:%s'%args)

functionname(['ok',11,22,33]) #輸出:['ok', 11, 22, 33]

序列化之pickle和json

pickle 和json 是序列化的兩個模塊。

Json模塊提供了四個功能:dumps、dump、loads、load

pickle模塊提供了四個功能:dumps、dump、loads、load

pickle

首先,我們嘗試把一個對象序列化并寫入文件:

accounts = {

'k1':'hello',

'k2':'world'

}

f = open('dump.txt','wb')

f.write(pickle.dumps(accounts))

f.close()

pickle.dumps()把任意對象序列化成一個str,然后,就可以把這個str寫入文件.或者用另一個方法pickle.dump()直接把對象序列化后寫入一個文件:

f = open('dump.txt','wb')

pickle.dump(accounts,f)

f.close()

看看寫入的dump.txt文件,一堆亂七八糟的內容,這些都是Python保存的對象內部信息。

當然有序列化也有反序列化,我們把dump.txt的一堆亂碼給還原:

f = open('dump.txt','rb')

ret = pickle.loads(f.read())

f.close()

當然我們也可以直接用pickle.load()方法從dump.txt中直接反序列化出對象:

f = open('dump.txt','rb')

pickle.load(f)

f.close()

內容又變回來了。

ps:是python獨有的序列化方式,比json功能強大任何類型的數據都可以被序列化和反序列化。

json

如果我們要在不同的編程語言之間傳遞對象,就必須把對象序列化為標準格式,比如XML,但更好的方法是序列化為JSON,因為JSON表示出來就是一個字符串,可以被所有語言讀取,也可以方便地存儲到磁盤或者通過網絡傳輸。JSON不僅是標準格式,并且比XML更快,而且可以直接在Web頁面中讀取,非常方便。

accounts = {

'k1':'hello',

'k2':'world'

}

f = open('dump.txt','w')

f.write(json.dumps(accounts))

f.close()

打開dump.txt 文件內容不在是亂碼,并且是可讀的

{"k1": "hello", "k2": "world"}

由此可見dumps()方法返回一個str。內容就是標準的JSON。類似的,dump()方法可以直接把JSON寫入一個file-like Object。

f = open('dump.txt','w')

json.dump(accounts,f)

f.close()

要把JSON反序列化為Python對象,用loads()或者對應的load()方法,前者把JSON的字符串反序列化,后者從file-like Object中讀取字符串并反序列化:

f = open('dump.txt','r')

c = json.loads(f.read())

f.close()

有一點需要注意,就是反序列化得到的所有字符串對象默認都是unicode而不是str。由于JSON標準規定JSON編碼是UTF-8,所以我們總是能正確地在Python的str或unicode與JSON的字符串之間轉換。

importsmtplibfrom email.mime.text importMIMETextfrom email.utils importformataddr

msg= MIMEText('郵件內容', 'plain', 'utf-8')

msg['From'] = formataddr(["武沛齊",'wptawy@126.com'])

msg['To'] = formataddr(["走人",'424662508@qq.com'])

msg['Subject'] = "主題"server= smtplib.SMTP("smtp.126.com", 25)

server.login("wptawy@126.com", "郵箱密碼")

server.sendmail('wptawy@126.com', ['424662508@qq.com',], msg.as_string())

server.quit()

發郵件實例

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的python封装函数、实现将任意的对象序列化到磁盘上_Python系列之lambda、函数、序列化...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。