Đề xuất của tôi là sử dụng một chức năng. Nhưng thay vì đưa ifchức năng vào, điều mà bạn có thể muốn làm, hãy làm như thế này:
if verbose:
def verboseprint(*args):
# Print each argument separately so caller doesn't need to
# stuff everything to be printed into a single string
for arg in args:
print arg,
print
else:
verboseprint = lambda *a: None # do-nothing function
(Có, bạn có thể xác định một hàm trong một ifcâu lệnh và nó sẽ chỉ được xác định nếu điều kiện là đúng!)
Nếu bạn đang sử dụng Python 3, nơi printđã là một hàm (hoặc nếu bạn sẵn sàng sử dụng printnhư một hàm trong 2.x bằng cách sử dụng from __future__ import print_function) thì nó thậm chí còn đơn giản hơn:
verboseprint = print if verbose else lambda *a, **k: None
Bằng cách này, hàm được định nghĩa là không làm gì nếu chế độ tiết bị tắt (sử dụng lambda), thay vì liên tục kiểm tra verbosecờ.
Nếu người dùng có thể thay đổi chế độ chi tiết trong quá trình chạy chương trình của bạn, thì đây sẽ là cách tiếp cận sai (bạn cần có iftrong hàm), nhưng vì bạn đang đặt nó bằng cờ dòng lệnh, bạn chỉ cần đưa ra quyết định một lần.
Sau đó, bạn sử dụng vd verboseprint("look at all my verbosity!", object(), 3)bất cứ khi nào bạn muốn in một thông báo "dài dòng".