SyntaxError:非默认参数遵循默认参数

Aid*_*deX 23 python

from os import system
def a(len1,hgt=len1,til,col=0):
    system('mode con cols='+len1,'lines='+hgt)
    system('title',til)
    system('color',col)

a(64,25,"hi","0b")
input()
Run Code Online (Sandbox Code Playgroud)

当我运行它时,它拒绝"def a(..."并突出显示"("红色.我不知道为什么.

Aad*_*Ura 36

我在这里澄清两点:

  • 首先非默认参数不应该遵循默认参数,这意味着你不能在函数中定义(a ="b",c)函数中定义参数的顺序是:
    • 位置参数或非默认参数即(a,b,c)
    • 关键字参数或默认参数即(a ="b",r ="j")
    • 仅关键字参数ie(*args)
    • var-keyword参数即(**kwargs)

def example(a, b, c=None, r="w" , d=[], *ae, **ab):

(a,b)是位置参数

(c =无)是可选参数

(r ="w")是关键字参数

(d = [])是列表参数

(*e)仅限关键字

(*opts)是var-keyword参数

所以首先重新安排你的参数

  • 现在次要的事情是你在hgt = len1时定义了len1,当保存默认值时没有定义len1参数,当你定义函数len1未定义时,Python计算并保存默认值,当发生这种情况时不存在(它仅在执行函数时存在)

所以第二次删除这个"len1 = hgt"在python中不允许.

记住参数和参数之间的区别,你可以在这里阅读更多:python中的参数和参数

  • 不要使用空列表作为函数参数的默认值,它会在运行中被携带。使用 None 代替。 (8认同)

fal*_*tru 10

如错误消息所示,非默认参数til不应遵循默认参数hgt.

更改参数顺序(函数调用也相应调整)或制作hgt非默认参数将解决您的问题.

def a(len1, hgt=len1, til, col=0):
Run Code Online (Sandbox Code Playgroud)

- >

def a(len1, hgt, til, col=0):
Run Code Online (Sandbox Code Playgroud)

UPDATE

SyntaxError隐藏的另一个问题.

os.system 只接受一个字符串参数.

def a(len1, hgt, til, col=0):
    system('mode con cols=%s lines=%s' % (len1, hgt))
    system('title %s' % til)
    system('color %s' % col)
Run Code Online (Sandbox Code Playgroud)


Mar*_*cny 7

关键字参数后面不能有非关键字参数.

确保重新排列函数参数,如下所示:

def a(len1,til,hgt=len1,col=0):
    system('mode con cols='+len1,'lines='+hgt)
    system('title',til)
    system('color',col)

a(64,"hi",25,"0b")
Run Code Online (Sandbox Code Playgroud)