gpt4 book ai didi

python - 返回确切的 python 函数的最佳方法只是作为单个可重复字符串运行

转载 作者:行者123 更新时间:2023-12-01 03:19:16 25 4
gpt4 key购买 nike

在某些函数中,我需要输出一个字符串,该字符串提供我刚刚运行的函数的可重复版本。

例如

def repeater(arg_a, kwarg_a = 1, kwrag_b = 'b', kwarg_d = {'a':'a'}):
func_str = #My exact function with input args as a string
print(func_str)

我想运行以下代码:

repeater('foo')

打印字符串:

"repeater('foo', kwarg_a = 1, kwrag_b = 'b', kwarg_d = {'a':'a'})"

最简单/最Python式的方法是什么?

最佳答案

呃,真是一团糟。我尝试使用装饰器的一般方法似乎非常笨重,而且我确信我遗漏了一些边缘情况。但是,它适用于示例,所以这里是:

import inspect 
from functools import wraps

def get_method_call(func, *args, **kwargs):
name = func.func_name

argspec = inspect.getargspec(func)
arg_length = len(argspec.args) - len(argspec.defaults)

kw_strings = []
for kw_name, default in zip(argspec.args[arg_length:], argspec.defaults):
called_value = kwargs.get(kw_name, default)
kw_strings.append('{}={}'.format(kw_name, repr(called_value)))

arg_string = ', '.join(list(map(repr, args)) + kw_strings)

return '{}({})'.format(name, arg_string)


def print_when_called(func):
@wraps(func)
def wrapper(*args, **kwargs):
print get_method_call(func, *args, **kwargs)
func(*args, **kwargs)
return wrapper


@print_when_called
def repeater(arg_a, kwarg_a = 1, kwrag_b = 'b', kwarg_d = {'a':'a'}):
pass


repeater('foo') # repeater('foo', kwarg_a=1, kwrag_b='b', kwarg_d={'a': 'a'})

关于python - 返回确切的 python 函数的最佳方法只是作为单个可重复字符串运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42094708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com