python - 是否可以将2个函数组合在一起创建1个函数?

时间:2013-10-17 18:09:38

标签: python

是否可以将这些功能组合在一起以创建1个功能?

def checkinput():
    while True:
        try:
            name=input("whats your name?")
            return name
        except ValueError:
            print("error!")

结合:

def checkage():
       while True:
           try:
               age=input("whats your age?")
               return age
           except ValueError:
               print("error!")

提前致谢!

4 个答案:

答案 0 :(得分:3)

您可以重构代码以创建一个处理两种情况的函数,方法是识别相同的部分,并参数化其他部分。

def check_value(prompt):
    while True:
        try:
            val=input(prompt)
            return val
        except ValueError:
            print("error!")

两个函数之间的唯一区别(除变量名之外的微不足道的差异)是input函数显示的提示。我们将它作为新统一函数的参数,并将其称为:

x = check_input("What's your name?")
y = check_input("What's your age?")

为什么您希望input可能提出ValueError是一个不同的问题。

答案 1 :(得分:3)

如果您想要概括代码,可以编写一个函数,可以提出任意数量的问题。

您可以创建一个如下所示的函数:

def ask_a_question(prompt):
   while True:
       try:
           answer = input(prompt)
       except ValueError:
           print("Error!")
       else:
           return answer

例如,在main()函数中,您可以有一个提示列表:

prompts = {
    'name': 'What is your name?',
    'age': 'How old are you?',
    'dog': 'Do you love dogs more than cats? (yes, you do)',
}

最后你会创建一个循环,逐个问你所有的问题:

answers = {}  # a dictionary of answers

for key, prompt in prompts.items():
    answers[key] = ask_a_question(prompt)

希望能为您提供有关如何减少类似功能重复的一些想法。

答案 2 :(得分:2)

您可以轻松地从其他功能调用函数:

def check_user_data():
    checkinput()
    checkage()

但实际上,这是一件愚蠢的事情。如果你只是想要他们的名字和年龄,你最好做这样的事情:

 def get_user_info():
     name = input("What is your name? ")
     age = input("What is your age? ")
     return name, age

当你刚刚接受输入时,你永远不会得到ValueError - 如果你正在做int(input('What is your age? ')),你可以获得ValueError,否则你的其余代码是多余的。

答案 3 :(得分:1)

是!

def check_input_and_age():
    return checkinput(), checkage()