0

私は現在プログラミングを勉強していますが、次の問題があります。

ユーザーはコマンドラインから実行したい操作を入力し、操作に応じてアイテムに関する情報を入力する必要があります。

私は次のようなことを試しました:

def stock(f):
    d={}
    f()
    return d


def add(item,amount):
    d[item]=amount
    return d

または

def stock(item,amount,f):
    d={}
    if f():
        d[item]=amount
    return d


def add():
    return True

そして、2番目のコードは私には機能しません。なぜなら、このコードremove(a、b)を使用したい場合、3つの引数は必要ないからです。私が言おうとしているのは、私の操作に応じた引数の変更の数です。これをどのように処理しますか。

4

2 に答える 2

1

私があなたを正しく理解しているなら、あなたは辞書のファクトリパターンが必要です

>>> class Calc(object):
    def __init__(self):
            #Initialize a dictionary of keywords and callbacks
        self.operation = {
            'add':self.add,
            'sub':self.sub,
            'mul':self.mul,
            'div':self.div,
            'neg':self.neg

            }
    #Overload the function call
    def __call__(self, *args):
        return self.operation[args[0]](*args[1:])
    # *args - variable list argument list
    def add(self,*args):
        return sum(args)
    def sub(self,*args):
        return args[1] - args[0]
    def mul(self, *args):
        if len(args) == 0:
            return 1
        elif len(args) == 1:
            return args[0]
        else:
            return args[0] * args[1]
    def div(self, *args):
        return args[0] / args[1]
    def neg(self, *args):
        return -args[0]


>>> calc = Calc()
>>> calc('add',1,2,3)
6
>>> calc('mul',10)
10
>>> calc('mul',10,4)
40
>>> calc('neg',3)
-3
>>> 
于 2012-12-14T14:00:07.960 に答える
1

ここで何をしようとしているのか正確にはわかりませんが、Pythonコードでよく見られるのは、次のように定義された関数です。

def foo(*args):
    print(args)  #args is a tuple
    print(len(args))  #you can inspect it's length to see how foo should behave

次に、この関数を次のように呼び出すことができます。

foo(1)
foo(1,2)
foo(1,2,3)
foo(1,2,3,"spam")

于 2012-12-14T13:44:09.327 に答える