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

时间:2014-07-13 03:50:32

标签: 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()

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

3 个答案:

答案 0 :(得分:24)

我在此澄清两点:

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

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

(a,b)是位置参数

(c = none)是可选参数

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

(d = [])是列表参数

(* e)仅限关键字

(* opts)是var-keyword参数

所以先重新安排你的参数

  • 现在第二件事是你在做hgt = len1时定义了len1 保存默认值时未定义len1参数,Python在您定义函数时计算并保存默认值 len1未定义,不存在,何时发生(仅在执行函数时才存在)

所以第二次删除这个" len1 = hgt"它不允许在python中使用。

请记住参数和参数之间的区别,您可以在这里阅读更多信息:Arguments and parameters in python

答案 1 :(得分:9)

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

更改参数顺序(相应调整函数调用)或使hgt非默认参数可以解决您的问题。

def a(len1, hgt=len1, til, col=0):

- >

def a(len1, hgt, til, col=0):

<强>更新

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)

答案 2 :(得分:5)

关键字参数后,您不能拥有非关键字参数。

确保重新安排你的函数参数:

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