核心程式設計(第十章)巢狀函式,裝飾器

2022-08-25 16:30:24 字數 2581 閱讀 7137

例10.1

#

!/usr/bin/env python

#encoding: utf-8

import

ipdb

defsafe_float(obj):

'safe version of float()

'try

: retval =float(obj)

except

(valueerror, typeerror), diag:

retval =str(diag)

return

retval

defmain():

'handles all the data processing

'log = open('

cardlog.txt

', 'w'

)

try:

ccfile = open('

carddata.txt

', 'r'

)

except

ioerror, e:

log.write(

'no txns this month\n')

log.close()

return

e txns =ccfile.readlines()

ccfile.close()

total = 0.00log.write(

'account log:\n')

for eachtxn in

txns:

result =safe_float(eachtxn)

ifisinstance(result, float):

total = total +result

log.write(

'data... processed\n')

else

: log.write(

'ignored: %s

' %result)

print

'$%.2f (new balance)

' %(total)

log.close()

if__name__ == "

__main__":

main()

11.3.6 裝飾器

下面的內容參考加了部分我的理解

一、首先來大致了解下巢狀函式:

def

foo(a):

defsubfoo(b):

return(b +a)

return

(subfoo)

f = foo('

content

') #

由於foo返回的是subfoo,所以f是對subfoo的引用

f('sub_

') #

因為subfoo記錄了foo的引數變數'content',所以返回值為'sub_content'

實際上,這裡的關係為:f == subfoo,a == 'cotent',b == 'sub_'

二、巢狀函式和它的變種(裝飾器)

def

action(z):

return(z + 1)

defaction_pro(y):

defwarpper(x):

ipdb.set_trace()

return(y(1) *x)

return

(warpper)

action2 = action_pro(action) #

action2一般和要裝飾的函式一致,這裡為了區分,這樣寫而已。

print action2(4) #

此函式實際為warpper(4),返回值為8

這裡,action2 == warpper, y == action(所以巢狀層用到y時,要有括號中的引數), x == 4

其實也等價於下面,action經過重新賦予,已經變為新的函式了:

def

action(z):

return(z + 1)

defaction_pro(y):

defwarpper(x):

ipdb.set_trace()

return(y(1) *x)

return

(warpper)

action = action_pro(action) #

第乙個action為自定義的偽裝變數,第二個action

print action(4) #

此函式實際為warpper(4),返回值為8

使用@的寫法,結果都是相同的:

def

action_pro(y):

defwarpper(x):

ipdb.set_trace()

return(y(1) *x)

return

(warpper)

@action_pro

defaction(z):

return(z + 1)

Python核心程式設計 第十章

1.命名空間 任何可訪問的變數必須在命名空間裡列出。訪問變數需要由直譯器進行搜尋,如果請求的名字沒有在任何命名空間裡找到,那麼將會生成乙個nameerror異常。2.try except語句檢測和處理異常,你可以新增乙個可選的else子句處理沒有檢測到異常的時執行的 try語句塊中異常發生點後的剩餘...

第十章 函式

使用def關鍵字 定義個數可變的位置形參 定義個數可變的關鍵字形參 定義預設值引數 定義個數可變的位置形參 deffun1 args 結果為乙個元組 print args fun1 10,20,30 10,20,30 定義個數可變的關鍵字形參 deffun2 args 結果為乙個字典 print a...

第十章 網路程式設計

1.網路基礎概念 網路程式設計!程式設計 略2.ip協議 ip internet protocol 協議是網際層的主要協議,支援網間互連的資料報通訊。它提供主要功能有 1 無連線資料報傳送 2 資料報路由選擇和差錯控制 3.tcp udp 1 tcp transmission contorl pro...