- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在传递字符串列表,我想使用 functools.partial 将其转换为方法调用:
[ 'object1.method1(arg1, arg2, 4, key=value)', 'object2.method2(6, arg1)' ...]
使用正则表达式生成 functools.partial 所需的“func”参数很容易,但是我很容易将括号内的字符串转换为有效的 *args 和 **kwargs 来传递给functools.partial。
每个列表项都保证是有效的 Python。我只是无法想出一种快速、简单的方法来将“arg1、arg2、4、key=value”等字符串转换为 functools.partial 可以使用的东西。我错过了什么?
更新:
我很抱歉。我确实忘记了重要信息。 args 不是此过程范围内的有效标识符,因此“eval”不起作用。然而,它们在使用结果部分对象的范围内是正确的,因此它们可以作为文字“复制”。我当前的过程返回一个字符串“arg1,arg2,4,this=that”。如果直接传递给 functools.partial,functools.partial 会将其“包装”为单个字符串参数。
嗯..我描述得越多,我就越意识到除非这些标识符在此范围内有效,否则无法做到这一点...
最佳答案
我正在写另一个答案,因为如果我更改旧的答案,评论将根本无法反射(reflect)内容。相反,如果事实证明这是一个更好的答案,我将撤回另一个答案。以下内容应该有效。
工作原理:
下面的代码集中在2.-4上。假设进口。当然,由于作用域中存在额外的代码,因此还存在名称冲突的额外问题
def wrapper(func_, *args, **kw):
new_args = []
new_kw = {}
for arg in args:
if type(arg)==functools.partial:
arg = arg()
new_args.append(arg)
for key in kw:
value = kw[key]
if type(value)==functools.partial:
value = value()
new_kw[key]=value
return func_(*new_args, **new_kw)
orig_str = 'object1.method1(arg1, arg2, 4, key=value)'
argstr = re.search('.+\((.+)\)', orig_str).group(1)
args = []
kw = {}
for x in argstr.split(','):
if '=' in x:
key, value = x.strip().split('=')
else:
value = x.strip()
key = None
value = functools.partial(eval, value)
if key:
kw[key]=value
else:
args.append(value)
what_you_want = functools.partial(wrapper, func, *args, **kw)
关于python - 从解析的字符串创建 functools.partial *args 和 *kwargs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3920043/
模块functools 引用reduce 定义在_functools 中。同时 _functools 指的是在 functools 中定义的 partial 我在尝试为猴子修补目的创建命名空间副本时遇
我有以下两个装饰器: 装饰器1: import functools def overrides(interface_class): print('interface_class:', inte
我有一个函数,我正在尝试制作它的部分版本,然后在 reduce 语句中应用该部分函数。 偏函数本身是有效的——因为我可以正常地用一组参数调用它,它会返回正确的答案。但是,如果在 reduce 下应用它
考虑以下代码: import functools import inspect class Foo: def foo_fn(self, hello, world): print
我正在尝试 pickle 一个 SortedListWithKey,我正在使用 functools 中的 cmp_to_key() 将比较函数转换为键函数。但是, cmp_to_key() 似乎使我的
考虑以下几点: from functools import partial def add(a, b, c): return 100 * a + 10 * b + c add_part = pa
我知道 collections.namedtuple 的存在和目的,但我注意到,至少在 IDLE (3.2.2) 中,这个工厂函数也在 functools: >>> import functools
我一直在使用 Python,我设置了以下代码情况: import timeit setting = """ import functools def f(a,b,c): pass g = fu
一.简单介绍: functools模块用于高阶函数:作用于或返回其他函数的函数。一般而言,任何可调用对象都可以作为本模块用途的函数来处理。 functools.parti
我在 Windows 上使用 Python 3.7 运行每个代码时都会发生此错误: Traceback (most recent call last): File "test.py", line
以下是我的代码片段。当我运行该程序时,出现以下错误。 @functools.total_ordering AttributeError: 'module' object has no attrib
回答一个问题时,我注意到我不知道如何在reduce中执行append后返回列表,例如 import functools futures = [1,2,3] records = functools.re
#!/usr/bin/python from functools import wraps def logged(func): @wraps(func) def with_loggin
是否可以在项目被逐出时为 functools.lru_cache 定义回调?在回调中,缓存的值也应该存在。 如果没有,也许有人知道支持逐出和回调的轻量级类字典缓存? 最佳答案 我将发布我使用的解决方案
我在使用 functools.partial 时遇到问题。 我的代码: selected_words = ['awesome', 'great', 'fantastic', 'amazing', 'l
我有以下代码: import functools import random import inspect def myfirst(a, b): return a + b def myseco
我想要一个可以使用 functools.lru_cache 的函数,但默认情况下不能。我正在寻找一种方法来使用可用于禁用 lru_cache 的函数参数。目前,我有两个版本的函数,一个有 lru_ca
我目前面临“functools.reduce(operator.iadd,...)”改变原始输入的问题。例如 我有一个简单的数据框 df = pd.DataFrame([[['A', 'B']], [
在 Python Cookbook 部分 9.5. Defining a Decorator with User Adjustable Attributes我一直难以理解以下代码中 functools
我发现 functools.partial 有很多很棒的用例。 但是,我发现需要定义我称之为 partial_right 的东西。它就像部分的,但从“右边”绑定(bind)非 kwargs。 我的问题
我是一名优秀的程序员,十分优秀!