Đề xuất của tôi là sử dụng một chức năng. Nhưng thay vì đưa if
chứ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 if
câ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 print
như 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 verbose
cờ.
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ó if
trong 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".