如何将Python表达式转换为stirng

问题描述 投票:0回答:1

我有这样的清单

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
python string list expression
1个回答
0
投票

您可以应用

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']
© www.soinside.com 2019 - 2024. All rights reserved.