0

我以这种方式动态创建一个函数:

def create_function(value):
    def _function():
        print value
return _function

f1 = create_func(1)
f1()

它工作正常并打印'1'。

但我的问题略有不同,比如有一个名为 no_of_arguments 的变量,其中包含返回的函数 (_function() ) 所采用的参数数量。

def create_function():
    no_of_arguments = int(raw_input()) #provided by user
    def _function(a,b,c,....): 

'这个函数必须接受一定数量的参数,在变量 no_of_arguments 中指定'

        #do something here
return _function

f1 = create_func()
f1(a,b,c......)
4

4 回答 4

1

在函数参数中使用*以使其接受任意数量的位置参数。

def func(*args):
    if len(args) == 1:
       print args[0]
    else:
       print args
...        
>>> func(1)
1
>>> func(1,2)
(1, 2)
>>> func(1,2,3,4)
(1, 2, 3, 4)
于 2013-07-02T07:29:47.307 回答
0

一个函数可以通过在一个前面加上 a 来定义为采用任何(最小)数量的参数*,这将导致名称被绑定到一个包含适当参数的元组。

def foo(a, b, *c):
  print a, b, c

foo(1, 2, 3, 4, 5)

不过,您需要自己限制/检查以这种方式传递的值的数量。

于 2013-07-02T07:29:20.373 回答
0

你可以使用*args

def create_function():
    no_of_arguments = int(raw_input()) #provided by user
    def _function(*args):
        if len(args) == no_of_arguments:
            dostuff()
        else:
            print "{} arguments were not given!".format(no_of_arguments)
    return _function

以运行它为例:

>>> f1 = create_function()
4 # The input
>>> f1('hi','hello','hai','cabbage')
>>> f1('hey')
4 arguments were not given!
于 2013-07-02T07:29:56.023 回答
0

据我了解,您需要向函数传递不同数量的参数您可以使用 * 传递不同数量的参数,如下所示:

def create_function():
    no_of_arguments = (argList) #tuple of arguments
    def _function(*argList): 
于 2013-07-02T07:36:35.583 回答