嗨,我有一个向不同函数传递动态参数的问题。
例如:
假设我有7个变量(Arg1,Arg2,Arg3,Arg4,Arg5,Arg6,Arg7)都是计算变量。
现在,我只需要将arg1、arg2、arg3变量传递给method1、arg1、arg4、arg5等。
我需要动态地做这件事。
就像在方法和它可以接受的变量之间有一个映射函数一样。通过选择方法,我需要得到它可以接受的变量,并只将这些变量传递给函数
def method1(arg1,arg2,arg3):
pass
def method2(arg1,arg4,arg5):
pass
def method3(arg1,arg2,arg4,arg6)
pass
如何实现这一点????
我还尝试了另一种方法。如果我在这个方法上错了,请纠正我
在一个类中,所有变量都在init中。您可以计算或更改变量。然后在获得方法名之后,我将调用包装器来获取需要传递给该方法的变量,然后使用变量调用该方法
class Class1():
def __init__(self):
self.arg1 = 0
self.arg2 = 0
self.arg3 = 0
self.arg4 = 0
self.arg5 = 0
def compute(self):
self.arg1 =1
self.arg4 = 1
method_name = "cars"
method_to_call = getattr(Class1(),method_name)
method_variables = method_to_variables_mapper(method_name)
result = method_to_call(method_variables )
print result
def method_to_variables_mapper(method_type):
mapper = {
"method1" : [{"arg1_name" : self.arg1} , {"arg2_name" :
self.arg2}]
"method2" : [{"arg3_name" : self.arg3}],
"method3" : [{"arg1_name" : self.arg1}, {"arg3_name" :
self.arg3}]
}
return mapper[method_type]
def cars(self, *args)
return 1
def bikes(self,*args)
return 2
下面是一个非常基本的示例,说明如何将方法映射到参数。它假设args
是一个dicing
,它在call
的范围内。您可能需要将您的args
作为参数传递给call
。
method_mapper = {
method1: ('arg1', 'arg2', 'arg3'),
method2: ('arg1', 'arg4', 'arg5'),
method3: ('arg1', 'arg2', 'arg4', 'arg6')
}
def call(method):
arg_names = method_mapper.get(method)
if arg_names: # we have args
print("method is %s" % (method.__name__))
print(" argument names are %s ; where" % (arg_names,))
for name in arg_names:
print (" %s = %s" % (name, args.get(name)))
call(method1)
命名参数可能是您正在寻找的解决方案,因为您可以将命名值的字典传递给每个方法调用。例如:
# named arguments
args = {
'arg1': 'One',
'arg2': 'Two',
'arg3': 'Three',
'arg4': 'Four',
'arg5': 'Five',
'arg6': 'Six',
'arg7': 'Seven'
}
# explicitly name the parameters, good for readability
def method1(arg1=None,arg2=None,arg3=None, **kwargs):
print("arg1 %s arg2 %s arg3 %s" % (arg1, arg2, arg3))
# explicitly name the parameters, good for readability
def method2(arg1=None,arg4=None,arg5=None, **kwargs):
print("arg1 %s arg4 %s arg5 %s" % (arg1, arg4, arg5))
# no named parameters, check the kwargs dict for each required argument
def method3(**kwargs):
arg1 = kwargs.get('arg1')
arg2 = kwargs.get('arg2')
arg4 = kwargs.get('arg4')
arg6 = kwargs.get('arg6')
print("arg1 %s arg2 %s arg4 %s arg6 %s" % (arg1, arg2, arg4, arg6))
method1(**args)
method2(**args)
method3(**args)
运行该代码将生成以下输出:
arg1 One arg2 Two arg3 Three
arg1 One arg4 Four arg5 Five
arg1 One arg2 Two arg4 Four arg6 Six
问题内容: 我很好奇Go中是否有可能。我有多种方法的类型。是否可以有一个函数,该函数需要一个方法参数,然后将其称为类型? 这是我想要的一个小例子: Go认为type 有一个称为的方法,而不是用传入的方法名称替换它。 问题答案: 是的,有可能。您有2(3)个选项: 规范:方法表达式 该表达式产生的功能与第一个参数等效,但具有一个显式接收器。它有签名。 在这里,方法接收器是显式的。您只需将方法名称(具
问题内容: 方法context.getBean(name,user)的文档说 允许指定显式构造函数参数/工厂方法参数 但是无论我做什么(尝试一切),使用最合理的设置在初始化期间加载Bean时都会得到以下信息: 注释说可以做到的,但是如果您在该bean的xml定义中指定构造函数参数,则失败。 问题答案: 在javadoc中说: args-在使用静态工厂方法的显式参数创建原型时使用的参数。 因此,be
我试图通过动态输入要从中提取数据的工作表的名称,以这种方式重用现有的数据提供程序,将Excel文件中的数据加载到我的测试框架中。 示例:我正在从Login凭据表加载数据,该表代表成功登录测试的数据。第二个测试是失败的登录测试,它从InvalidLogin凭据表加载数据。第三个测试从第三个表UserInformation等中提取数据。我所遵循的udemy课程并没有真正涵盖这个主题,我觉得整个事情的实
本文向大家介绍shell传参并将参数传递给sql文件的方法,包括了shell传参并将参数传递给sql文件的方法的使用技巧和注意事项,需要的朋友参考一下 如下所示: 调用代码: sh /tmp/t.sh 20160808 以上这篇shell传参并将参数传递给sql文件的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
使用,并希望将常量/参数传递给自定义映射器 我的目的地具有 Map 类型的字段
问题内容: 我将主类作为命令行参数传递给启动VM 现在我需要将命令行参数传递给该主类 有什么办法吗? 这就是我做的方式 这里的userVMargs是我的主类的类路径,也是该类的类路径,该类路径用于调用主类内部的类方法 和cmdLine拥有我的主类以及该类及其功能,我使用eclipse作为IDE来开发我的项目 问题答案: 如果要通过发送参数来启动VM,则应发送VM参数而不是程序参数。 程序参数是传递