兩個小例子徹底明白python decorator

2022-07-27 16:12:24 字數 2247 閱讀 7321

一:沒有什麼實際意思,就是單純的理解decorator。使用裝飾器完全可以阻止方法中的**執行。

class json_test(object

): def __init__(self, *arg, **args):

self.name = '

default_name

'self.gender = '

default_gender

'self.age = 0

self.address =none

jt =json_test()

class ignore_null_value(object

): def __init__(self, *args, **kwargs):

print(

'ignore_null_value.init')

@staticmethod

def to_json(*arg, **args):

d ={}

for key, value in arg[0

].__dict__.items():

if value !=none:

d.setdefault(key, value)

for key, value in

args:

d.setdefault(key, value)

return

d

class keep_null_value(object

): def __init__(self, *args, **kwargs):

print(

'keep_null_value.init')

@staticmethod

def to_json(o):

return

o.__dict__

def deco(c):

def _deco(func):

def __deco(*arg, **args):

print(

'before')

try:

s = c.to_json(*arg, **args)

return

s

finally

: print(

'after')

return

__deco

return

_deco

class c(object

): @staticmethod

@deco(keep_null_value)

def json_from(self, a):

pass

cl =c()

print cl.json_from(jt)

二:輸出前後加上log,這個是書中的原例子,哪本書不記得了,不是《python基礎教程》就是《python核心程式設計》

from

time import time

def logged(when):

def log(f, *args, **kargs):

print

'''called:

function: %s

args: %r

kargs: %r'''

% (f, args, kargs)

def pre_logged(f):

log(f, *args, **kargs)

return f(*args, **kargs)

return

def post_logged(f):

now =time()

try:

log(f, *args, **kargs)

return f(*args, **kargs)

finally

: print

"time delta: %s

" % (time() -now)

return

try:

return [when]

except keyerror, e:

raise valueerror(e),

'must be "pre" or "post"

'@logged(

"post")

def hello(name):

print

"hello,

", name

hello(

"world!")

python 兩個值得學習的小例子

這兩個問題都是在中做pythin挑戰時碰到的,覺得很不錯 1.給你乙個字串a和乙個正整數n,判斷a中是否存在長度為n的回文子串。如果存在,則輸出yes,否則輸出no。回文串的定義 記串str逆序之後的字串是str1,若str str1,則稱str是回文串,如 abcba a abcbaasdjhka...

python爬蟲 兩個簡單的小例子

import requests url value input search headers param response requests.get url url,params param,headers headers response.encoding utf 8 亂碼 page conten...

C兩個小例子(陣列與指標)

所謂的大端模式,是指資料的高位,儲存在記憶體的低位址中,而資料的低位,儲存在記憶體的高位址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理 位址由小向大增加,而資料從高位往低位放 例子 0000430 e684 6c4e 0100 1800 53ef 0100 0100 0000 0000440...