我刚刚开始学习Python
而我正在尝试编写一个函数,系统会要求用户输入j/J/ja or Ja
True
和n/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
希望得到你的帮助。
答案 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