Tôi mới sử dụng Python và trang trí, vì vậy xin lỗi nếu điều này có vẻ là một câu hỏi tầm thường.Sử dụng vòng lặp để trang trí nhiều chức năng được nhập trong Python
Tôi cố gắng để áp dụng trang trí với nhiều chức năng nhập khẩu dùng một vòng lặp bằng Python như hiển thị dưới đây
from random import random, randint, choice
def our_decorator(func):
def function_wrapper(*args, **kwargs):
print("Before calling " + func.__name__)
res = func(*args, **kwargs)
print(res)
print("After calling " + func.__name__)
return function_wrapper
for f in [random, randint, choice]:
f = our_decorator(f)
random()
randint(3, 8)
choice([4, 5, 6])
Lý tưởng nhất, tôi mong đợi đầu ra được ở dạng này:
Before calling random
<random_value>
After calling random
Before calling randint
<random_integer>
After calling randint
Before calling choice
<random_choice>
After calling choice
Nhưng, Tôi chỉ nhận được kết quả của chức năng lựa chọn là đầu ra.
<random_choice among 4,5 6>
Bộ trang trí không được áp dụng cho bất kỳ chức năng nào và trông giống như cuộc gọi ngẫu nhiên() và randint (3,8) không được thực thi.
Tôi muốn biết, điều gì đang xảy ra ở đây và có thể làm gì để trang trí nhiều chức năng được nhập bằng cách sử dụng vòng lặp?
Thanks for the help
Nhưng thực sự thay đổi các chức năng trong module ngẫu nhiên cũng thay đổi các thư viện khác điều đó xảy ra để sử dụng mô-đun đó, điều đó có thể nguy hiểm. Globals() là bất thường và là dấu hiệu của việc làm những thứ có lẽ không cần thiết, nhưng nó không đặc biệt nguy hiểm. – RemcoGerlich
Theo tôi biết điều này không thay đổi chức năng * trên toàn cầu *: bạn chỉ đặt các chức năng khác nhau cho tệp hiện tại. –
@WillemVanOnsem: có điều này, nhưng giải pháp của bạn thực sự thay đổi các chức năng trong mô-đun ngẫu nhiên, mã khác cũng sẽ thấy nó. – RemcoGerlich