SyntaxError: el argumento no predeterminado sigue al argumento predeterminado

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

Cuando ejecuto esto, rechaza “def a (…” y resalta “(” en rojo. No tengo idea de por qué.

Déjame aclarar dos puntos aquí:

  • en primer lugar, el argumento no predeterminado no debe seguir el argumento predeterminado, significa que no puede definir (a = “b”, c) en la función, el orden de definición de los parámetros en la función son:
    • Parámetro posicional o parámetro no predeterminado, es decir (a, b, c)
    • parámetro de palabra clave o parámetro predeterminado, es decir (a = “b”, r = “j”)
    • parámetro de palabra clave solo es (* args)
    • parámetro var-keyword ie (** kwargs)

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

(a, b) son parametros posicionales

(c = ninguno) es un parámetro opcional

(r = “w”) es un parámetro de palabra clave

(d = []) es el parámetro de lista

(* e) es solo para palabras clave

(* opta) es el parámetro var-keyword

así que primero reorganice sus parámetros

  • ahora lo segundo es que definió len1 cuando está haciendo hgt = len1 el argumento len1 no se define cuando se guardan los valores predeterminados, Python calcula y guarda los valores predeterminados cuando define la función len1 no está definida, no existe, cuando esto sucede (existe solo cuando se ejecuta la función)

por lo que, en segundo lugar, elimine este “len1 = hgt” que no está permitido en python.

tenga en cuenta la diferencia entre argumentos y parámetros, puede leer más sobre aquí: Argumentos y parámetros en python

Como dice el mensaje de error, el argumento no predeterminado til no debe seguir el argumento predeterminado hgt .

Cambiar el orden de los parámetros (la llamada a la función también puede ajustarse en consecuencia) o hacer que el hgt no sea predeterminado resolverá su problema.

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

->

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

ACTUALIZAR

Otro problema que está oculto por SyntaxError.

os.system acepta un solo parámetro de cadena.

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

No puede tener un argumento que no sea de palabra clave después de un argumento de palabra clave.

Asegúrese de reorganizar los argumentos de su función de la siguiente manera:

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