我有这样的清单
AB = [('NAME18',GX['WHY']),
('VALUE18',GX['HELLO']),
('NAME19',GX['SO']),
('VALUE19',GX['WHAT'])]
我想构建一些函数来打印元组的其他元素,例如
showdetail(AB,'NAME19')
and it return like
column name: NAME19 VALUE:GX['SO']
但它总是打印字典查找的值
我找到了其他问题中的代码,可以将表达式转换为字符串,但我不知道如何将其应用到我的案例中
def lambda_to_expr_str(lambda_fn):
"""c.f. https://stackoverflow.com/a/52615415/134077"""
if not lambda_fn.__name__ == "<lambda>":
raise ValueError('Tried to convert non-lambda expression to string')
else:
lambda_str = inspect.getsource(lambda_fn).strip()
expression_start = lambda_str.index(':') + 1
expression_str = lambda_str[expression_start:].strip()
if expression_str.endswith(')') and '(' not in expression_str:
# i.e. l = lambda_to_expr_str(lambda x: x + 1) => x + 1)
expression_str = expression_str[:-1]
return expression_str
您可以应用
lambda_to_expr_str
函数将表达式转换为字符串,然后使用它来构建 showdetail
函数。具体方法如下:
import inspect
def lambda_to_expr_str(lambda_fn):
"""
Convert a lambda function to a string representation of its expression.
"""
if not lambda_fn.__name__ == '<lambda>':
raise ValueError('Tried to convert non-lambda expression to string')
else:
lambda_str = inspect.getsource(lambda_fn).strip()
expression_start = lambda_str.index(':') + 1
expression_str = lambda_str[expression_start:].strip()
if expression_str.endswith(')') and '(' not in expression_str:
# i.e. l = lambda_to_expr_str(lambda x: x + 1) => x + 1)
expression_str = expression_str[:-1]
return expression_str
def showdetail(data, column_name):
"""
Show details of a column in the data.
"""
for item in data:
if item[0] == column_name:
expression_str = lambda_to_expr_str(item[1])
print(f"column name: {item[0]} VALUE:{expression_str}")
# Example usage:
AB = [('NAME18', lambda GX: GX['WHY']),
('VALUE18', lambda GX: GX['HELLO']),
('NAME19', lambda GX: GX['SO']),
('VALUE19', lambda GX: GX['WHAT'])]
showdetail(AB, 'NAME19')
这应该打印:
column name: NAME19 VALUE:GX['SO']