刚才有一个简单的问题,关于是否可以将函数所需的参数传递给字符串或可以在函数外部使用的其他格式
E.g。 def add(a,b): return a+b
,缺少缩进,抱歉格式化。
是否可以将这些参数转换为字符串或其他格式?目标结果是:
a=10
b=10
str="a,b"
add(str)
对于简单数据类型,可以通过以下方式实现:
但是考虑到复杂的条件,比如使用Keras
训练神经网络,它需要各种数据类型的数据集,优化器......等配置信息,不幸的是这种方法不起作用。
这很奇怪,但在我的情况下,如果可以简化我的training deep neuron networks
库设计工具箱的代码,例如model.fit()
函数。
希望我的描述有意义。
------------------------------ UPDATE ---------------- -----------
对于令人困惑的描述感到抱歉。希望这种尝试可以说清楚。
我的问题是在Python API中使用Keras训练神经网络的背景,这里是关于真实问题的近似版本:
我们假设我们有一个带有一些可选参数的函数funcA(p1,p2=None,p3,p4=None,....)
。然后我们有另一个函数funcB(..., params)
,在其中调用funcA
,我想这样做:
def funcB(..., params):
funcA(params)
将参数作为funcA()
所需参数的容器:
p1=...
p2=...
pn=...
然后params=[p1....pn]
并使用funcB
作为funcB(..., params)
。因此,funcA
中的funcB()
可以通过容器参数传递给model.fit(data,label, batch_size, epochs, verbose...)
的配置执行。
如果您有兴趣,真实案例是培训脚本(让我们说train.py)包括:
outside
我想找到一个最佳纪元数量for i in range(3):
剧本:
run train.py #includes model.fit(params) while params can be delivered in some way.
{{1}}
但困难的部分是如何将多个(可选或非可选)参数传输到我的案例中名为 params 的单个容器。
答案 0 :(得分:3)
编辑编辑问题:
要实现这一点,您可以提供参数列表,并调用*:
def funcA(p1,p3,p4=None, p5= None):
print(p1+p3)
if p4 != None:
print(p1+p3+p4)
def funcB(p1,p2,p3, params):
print(p1,p2,p3)
funcA(*params)
funcA(2,3)
funcA(2,3,5)
funcB("hi", "everythin", "OK", [2, 3])
funcB("hi", "everythin", "OK", [2, 3, 5])
对于旧问题:
你可以在这种情况下使用eval,看看:
a=10
b=10
tup = "a,b"
def add(string):
...
如果我理解得很好,你可以这样称呼:
add(*(eval(tup)))
给出:
20
答案 1 :(得分:2)
Damian Lattenero的答案很糟糕但是如果你不想改变这个功能的代码,这可能有用:
a=10
b=10
str="a,b"
add(*(eval(str)))
*
会展开eval
的{{1}},并为您提供预期的结果。
答案 2 :(得分:-1)
如果你想按照你的描述去做,** kwargs绝对不适用于你的情况,我想你可以使用locals()
和辅助函数/装饰器:
def get_args(d, s):
arguments = s.split(",")
return {x: d[x] for x in arguments}
a = 10
b = "hello"
def custom_function(**kwargs):
print(kwargs)
custom_function(**get_args(locals(), "a,b"))
将打印
{'a': 10, 'b': 'hello'}
此外,这种情况下的功能可以是例如
def custom_function(a, b):
print(a, b)