0

この方法で関数を動的に作成します。

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

f1 = create_func(1)
f1()

これは正常に動作し、「1」を出力します。

しかし、私の問題は少し異なります。返される関数 (_function() ) が取る引数の数を含む no_of_arguments という変数があるとします。

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

使用できます*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 foo(a, b, *c):
  print a, b, c

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

ただし、この方法で渡される値の数を自分で制限/チェックする必要があります。

于 2013-07-02T07:29:20.373 に答える