【问题标题】:Python - non-default argument follows [duplicate]Python - 非默认参数遵循[重复]
【发布时间】:2016-11-09 15:12:59
【问题描述】:

我刚开始学习Python,我正在尝试编写一个函数,其中将要求用户输入j/J/ja or Ja for Truen/N/nein or Nein for False

代码如下:

def ask_ok(prompt, retries=4, complaint="Ja oder Nein!", abc):
    while True:
        ok = input(prompt)
        if ok in ('j', 'J', 'ja', 'Ja'): abc = True
        if ok in ('n', 'N', 'nein', 'Nein'): abc = False
        retries = retries - 1
        if abc is True:
            print ("Its True")
            return True
        elif abc is False:
            print("Its False")
            return False
        elif retries < 0:
            raise IOError('Keine Fags erlaubt!')
        print(complaint)


ask_ok("Willst du wirklich aufhören?\n")

PyCharm 显示错误:

line 1
    def ask_ok(prompt, retries=4, complaint="Ja oder Nein!", abc):
              ^
SyntaxError: non-default argument follows default argument

希望得到您的帮助。

【问题讨论】:

  • abc 必须有默认值或位于retries之前
  • 这个错误是不言自明的。在几个默认参数(retriescomplaint)之后,您有一个非默认参数(abc)。这在 Python 中是不允许的。
  • 谢谢,我的问题解决了

标签: python-3.x


【解决方案1】:

在函数定义的参数列表中,具有默认值的参数(例如retries=4,必须是最后一个。如果将定义更改为def ask_ok(prompt, abc, retries=4, complaint="Ja oder Nein!"):,应该没问题。

这减少了调用函数时的歧义。

【讨论】:

    【解决方案2】:

    这应该可行:

    def ask_ok(prompt, abc=0, retries=4, complaint="Ja oder Nein!"):
        while True:
            ok = input(prompt)
            if ok in ('j', 'J', 'ja', 'Ja'): abc = True
            if ok in ('n', 'N', 'nein', 'Nein'): abc = False
    
            retries = retries - 1
            if abc is True:
                print ("Its True")
                return True
            elif abc is False:
                print("Its False")
                return False
            elif retries < 0:
                raise IOError('Keine Fags erlaubt!')
            print(complaint)
    
    
    ask_ok("Willst du wirklich aufhören?\n")
    

    【讨论】:

      【解决方案3】:

      在python中,只有在函数原型声明中指定了所有位置参数之后,才必须出现具有默认值的参数。

      因此,您的函数原型声明必须如下所示:-

      def ask_ok(prompt, abc, retries=4, complaint="Ja oder Nein!"):
         # your code
      

      此外,为了您的信息,您必须避免使用默认参数值作为默认值,因为它们只创建一次,并且它们将在每个函数调用之间共享:-

      例如。

      def sampleFunc(arg1=[]):
         arg1.append(23)
         print arg1
      
      sampleFunc(1)  # prints [1]
      sampleFunc(23) # prints [1, 23]
      

      这个不明显的东西一般都会让一些新手程序员对python感到困惑

      【讨论】:

      • 指定拒绝投票的原因。
      猜你喜欢
      • 1970-01-01
      • 2019-12-14
      • 2018-06-30
      • 2021-04-08
      • 1970-01-01
      • 1970-01-01
      • 2020-09-04
      • 1970-01-01
      相关资源
      最近更新 更多