[英]How to get the names of the output parameters of a function in Python?
我有
def foo(arg1, arg2):
a = 5
b = "hi"
return a, b, "c"
我想要一些返回("a", "b", "un-named")
或類似內容的magic(foo)
。
Python里面有沒有類似的東西?
編輯:為什么?
創建一個記錄器裝飾器,為讀者提供日志中值的上下文。
好的,因為 OP 要求我詳細說明評論中關於為什么這是一個壞主意以及有哪些替代方案的討論。
為什么不呢:一旦你從 function 返回值,你就不應該再關心它們里面有什么名字。 畢竟,調用什么變量並不重要,重要的是返回的值。 讓我們考慮以下 function:
def ex(foo):
a = 42
if foo:
return a
else:
return 6*7
function 之外的任何事情是否關心a
被返回還是6*7
? 並不真地。 無論哪種方式都是42。 如果您確實關心這種差異,您應該知道在 function 內部。在外部,您應該參考用於捕獲返回值的變量的名稱。
備選方案:你說你想在沒有用戶操作的情況下進行日志記錄,但是將裝飾器添加到 function 並不比顯式日志記錄簡單多少 - 並且可以說不太清楚。 同樣,同樣的原則也適用——您關心 function 中的名稱——這是您需要進行日志記錄的地方。
使用inspect.getsourcelines
並嘗試查找return
關鍵字的可能的初始實現。 我想可能有很多邊界情況會失敗,但這里我們是 go:
import inspect
def magic(function):
return_lines = list()
for line in inspect.getsourcelines(function)[0]:
line = line.strip()
if line.startswith("return"):
return_lines.append(tuple(line[7:].split(", ")))
return return_lines
>>> magic(foo)
[('a', 'b', '"c"')]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.