Rumah > Soal Jawab > teks badan
1.《python核心编程》的这段程序怎么理解?对于这个函数,书上说两个wraaped是闭包,但是不知道谁是自由变量。
2.代码:
from time import time
def logged(when):
def log(f, *args, **kwargs):
print '''Called:
function: %s
args: %r
kwargs %r''' % (f, args, kwargs)
def pre_logged(f):
def wraper(*args, **kwargs):
log(f, *args, **kwargs)
return f(*args, **kwargs)
return wraper
def post_logged(f):
def wrapped(*args, **kwargs):
now = time()
try:
return f(*args, **kwargs)
finally:
log(f, *args, **kwargs)
print "time delta: %s" % (time()-now)
return wrapped
try:
return {"pre": pre_logged, "post": post_logged}[when]
except KeyError, e:
raise ValueError(e), 'must bre "pre" or "post"'
@logged("post")
def hello(name):
print "Hello, ", name
hello('World!')
天蓬老师2017-04-18 10:36:08
Penutupan yang dipanggil merujuk kepada fungsi yang ditakrifkan dalam fungsi. Sebenarnya, secara tegasnya, semua definisi fungsi di bawah fungsi anda yang dilog di atas adalah penutup
迷茫2017-04-18 10:36:08
Mengenai penutupan:
Apabila fungsi sebaris merujuk kepada pembolehubah dalam skop luar, kami mendapat penutupan. Untuk membuat penutupan, perkara berikut mesti dipenuhi pada masa yang sama:
1 Mesti ada fungsi sebaris. Fungsi luaran dalam soalan adalah pra_log dan post_log, dan fungsi terbenam yang sepadan adalah pembungkus dan dibalut.
2. Fungsi sebaris mesti merujuk pembolehubah fungsi luaran. Soalan itu merujuk kepada args luaran, *parameter kwargs.
3. Nilai pulangan bagi fungsi luaran mestilah fungsi terbenam. Dalam soalan, pembalut pulangan, pembalut pulangan digunakan untuk kembali.
Mengenai penghias:
Ringkasnya, penghias ialah fungsi yang mengubah suai fungsi fungsi lain. Soalan yang dilog masuk ialah penghias, yang digunakan untuk menghiasi fungsi helo yang anda tentukan.
@logged("post")
def hello(name):
print "Hello, ", name
hello('World!')
Anda lulus dalam "post" sebagai parameter penghias Menurut: return {"pre": pre_logged, "post": post_logged}[apabila]
Fungsi post_logged dipanggil masa yang dihabiskan ( masa()-sekarang)
Untuk penjelasan terperinci tentang penghias, sila rujuk "Python Advanced":
Penjelasan terperinci penghias
Seluruh buku ini diterjemahkan dengan baik dan saya syorkan membacanya.