2017-02-19 30 views
0

я просто играл испытания, если струны были неизменны, потому что я был немного уставшим: D и сделал эторекурсивные вызовы и переменные ошибки присваивания [Python]

def x(string = "a", y = 0): 
    if y == 5: 
     return 
    else: 
     string += "x" 
     print(string) 
     x(string, y = y + 1) 
     print(string) 
x() 

и я просто интересно, почему это работает, но

def x(string = "a", y = 0): 
    if y == 5: 
     return 
    else: 
     string += "x" 
     print(string) 
     x(string, y += 1) 
     print(string) 
x() 

Не работает (разница в присвоении переменной y в рекурсивном вызове). Почему это синтаксическая ошибка, они просто делают то же самое?

+0

Синтаксическая ошибка означает, что python не может принять этот ввод в своей грамматике. – gzc

+0

Это много кода для создания синтаксической ошибки. Попытайтесь произвести ту же ошибку с минимальным количеством кода, забудьте о рекурсии и строках. –

+0

Попробуйте напечатать 'y' после рекурсивного вызова' x() ', и вы обнаружите, что он не изменился. Вы используете ключевое слово arg 'y', не присваиваемое' y' в вызове функции 'x()'. – AChampion

ответ

2

В первой версии вы сообщаете функции, что ваш параметр y принимает значение вашей переменной y, +1. Если ваш параметр был вызван z, у вас будет x(string, z=y+1).

Как вы видите, y+=1 не работает, вы пытаетесь изменить свою переменную, чтобы не дать функции именованный параметр. Но += ничего не возвращает, поэтому синтаксис действительно неверен.

+0

, но y = y + 1 ничего не возвращает – user7404408

+0

y в этом случае это имя параметра, например my_param = y + 1, это не назначение, но передача именованного параметра в функцию. –