如何让用户选择自己的功能

时间:2012-12-14 13:40:18

标签: python

我目前正在学习编程,但我遇到了以下问题。

用户应该从命令行输入他想要进行的操作,并根据操作输入有关该项目的信息。

我尝试过以下内容:

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

并且,第二个对我不起作用,因为,当我想使用此代码删除(a,b)时,我不需要三个参数。我想说的是根据我的操作改变参数的次数。我该如何处理。

2 个答案:

答案 0 :(得分: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")

答案 1 :(得分: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
>>>