Python - 非默认参数如下

时间:2016-11-09 15:13:00

标签: python-3.x

我刚刚开始学习Python而我正在尝试编写一个函数,系统会要求用户输入j/J/ja or Ja Truen/N/nein or Nein False 1}}。

以下是代码:

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

希望得到你的帮助。

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

这应该有效:

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")

答案 2 :(得分:0)

在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