SyntaxError: non-default argument follows default

2020-05-12 00:55发布

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

When I run this, it rejects "def a(..." and highlights "(" in red. I have no clue why.

标签: python
3条回答
家丑人穷心不美
2楼-- · 2020-05-12 01:23

As the error message says, non-default argument til should not follow default argument hgt.

Changing order of parameters (function call also be adjusted accordingly) or making hgt non-default parameter will solve your problem.

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

->

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

UPDATE

Another issue that is hidden by the SyntaxError.

os.system accepts only one string parameter.

def a(len1, hgt, til, col=0):
    system('mode con cols=%s lines=%s' % (len1, hgt))
    system('title %s' % til)
    system('color %s' % col)
查看更多
孤傲高冷的网名
3楼-- · 2020-05-12 01:30

Let me clear two points here :

  • firstly non-default argument should not follow default argument , it means you can't define (a="b",c) in function the order of defining parameter in function are :
    • positional parameter or non-default parameter i.e (a,b,c)
    • keyword parameter or default parameter i.e (a="b",r="j")
    • keyword-only parameter i.e (*args)
    • var-keyword parameter i.e (**kwargs)

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

(a,b) are positional parameter

(c=none) is optional parameter

(r="w") is keyword parameter

(d=[]) is list parameter

(*e) is keyword-only

(*opts) is var-keyword parameter

so first re-arrange your parameters

  • now secondary thing is you have define len1 when you are doing hgt=len1 the len1 argument is not defined when default values are saved,Python computes and saves default values when you define the function len1 is not defined, does not exist, when this happens (it exists only when the function is executed)

so second remove this "len1=hgt" its not allowed in python.

keep in mind difference between argument and parameters , you can read more about here : Arguments and parameters in python

查看更多
爱情/是我丢掉的垃圾
4楼-- · 2020-05-12 01:39

You can't have a non-keyword argument after a keyword argument.

Make sure you re-arrange your function arguments like so:

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")
查看更多
登录 后发表回答