【问题标题】:Checking arguments in python在python中检查参数
【发布时间】:2020-05-26 03:15:38
【问题描述】:

您好,我是一个刚开始编码的新手程序员。 假设存在一个函数:

def ask(a,b,c):

那么如果用户在调用函数时没有给出 3 个参数,我该如何返回一个字符串呢? 例如: ask(1,2) 还是ask(1,2,3,4)

【问题讨论】:

  • 您希望函数返回字符串,还是希望调用导致异常?后者已经是默认行为了。
  • 如果参数个数不匹配,我想返回“WRONG NUMBER OF ARGS”
  • Python 会为你做这件事,Experiment。或者使用def ask(*args): 并自己检查。

标签: python-3.x arguments


【解决方案1】:

定义函数时可以使用可变数量的参数。

def ask(*args):
  if len(args) != 3
    return "WRONG NUMBER OF ARGS"
  a, b, c = args
  # use a, b, c.

【讨论】:

    【解决方案2】:

    如果您只是想为常规功能执行此操作,您可以执行以下操作:

    def ask(a, b=None, c=None):
        if(b is None or c is None):
            return 'Error!'
        return 'Ok'
    
    def ask2(*a):
        if(len(a) !=3):
            return 'Error!'
        return 'Ok'
    
    print('---- ASK 1 -------')
    print(ask(1,2,3)) //OK
    print(ask(1,2)) //Error
    print(ask(1)) //Error
    
    print('\n---- ASK 2 -------')
    print(ask2(1,2,3,4)) //Error
    print(ask2(1,2,3)) //Ok
    print(ask2(1,2)) //Error
    print(ask2(1)) //Error
    
    

    这里我定义了2种ask,第一种最多3个参数,至少1个。

    第二个使用*,它可以得到一个包含任意数量项目的数字集合,然后在方法内部,我们检查集合的长度是否正好是3(借助len)。

    但是,如果您想将此函数用于命令行接口的 python 参数,有一个更好的方法可以做到这一点,check here 了解更多详细信息。

    import argparse
    
    parser = argparse.ArgumentParser(description='Process some integers.')
    parser.add_argument('integers', metavar='N', type=int, nargs='+',
                        help='an integer for the accumulator')
    parser.add_argument('--sum', dest='accumulate', action='store_const',
                        const=sum, default=max,
                        help='sum the integers (default: find the max)')
    
    args = parser.parse_args()
    print(args.accumulate(args.integers))
    
    

    借助argparse,您可以强制用户准确输入启动程序所需的参数数量,也可以为用户可以使用的命令定义可选参数等。

    【讨论】:

    • 感谢您提供详细的解决方案,但我已经参考了上面 Alex 的解决方案完成了任务:D
    • 没关系,StackOverflow 不是一个只针对一个人且只针对一次的问题。在你接受亚历克斯的之后,我开始回答。
    猜你喜欢
    • 2019-01-17
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 2022-08-11
    • 2016-05-31
    • 1970-01-01
    相关资源
    最近更新 更多