如何在不使用 splat 运算符的情况下解压缩具有不同数量元素的元组?



这是我大学项目的一部分,我正在尝试创建一个返回多个变量(解压缩元组(的函数,以调用另一个具有适当数量参数的函数。

value = function_list[i](*func())

只需使用 *(splat( 运算符就很容易,直到我们的一位讲师告诉我们不要使用此运算符。然后,我尝试通过将元组手动分配给变量来解压缩元组。

a, b = func()
function_list[i](a, b) #Causes error when a function requires more/less than 2 arguments.

Function_list是多个函数定义的列表,这些函数定义可能具有不同数量的参数。所以这在某些情况下是一个问题。这些函数不是我自己做的,因此我无法将这些参数更改为可选参数。

有什么最好的方法来替换*运算符以使我的所有功能正常工作吗?

另外,我不允许使用这些关键字:

as, assert, asynch, await, break, class, continue, except, finally, global, is, lambda, nonlocal, raise, try, with, yield. 

我认为不能使用*是一个奇怪的要求,但这是我提出的:

import inspect, functools
def get_min_max_arg_count(func):
params = inspect.signature(func).parameters
defaults = [p.default for p in params.values()]
return defaults.count(inspect._empty), len(params)
def call_with_params(func, params):
for param in params:
func = functools.partial(func, param)
return func()
def call_matching_func(func, function_list):
'''Call `func` and the first function in `function_list` that
has a signature matching the tuple returned by `func`.'''
params = func()
n_params = len(params)
for fn in function_list:
n_req, n_max = get_min_max_arg_count(fn)
if n_req <= n_params <= n_max:
return call_with_params(fn, params)

请注意,call_matching_func假定要传入的任何func都返回可迭代对象。

另请注意,我已经决定关键字参数不存在。

最新更新