Что значит сказать «если п»? - PullRequest
0 голосов
/ 25 декабря 2018

Что значит сказать if n?Я не понимаю, почему if n работает в операторе if.Не должно ли быть такого аргумента, как if n == 0 или что-то, а не просто if n?

def AddMusicAtPosition(self, newMusic, n):
    if n:
        self.nextMusic.AddMusicAtPosition(newMusic, n - 1)
    else:
        newMusic.nextMusic = self.nextMusic
        self.nextMusic = newMusic

Ответы [ 4 ]

0 голосов
/ 25 декабря 2018

В Python почти все верно, кроме сущностей Ложь, Нет, 0 и Пусто (строка, список, наборы, словарь)! (Может пропустить другие)

Так что если вы заявите, что:

if n:
    print(True)

Если n не 0, False, None или Пустые объекты, тогда будет напечатано True.

Чтобы проверить значения и поведение, вы можете сделать:

ns = [None, 0, False, '', {},(), [],1, True,]

for n in ns:
    if n:
        print(n, 'It is True')
    else:
        print(n, 'it is False')

Итак, что происходит, если n проверяет достоверность значения n:)

0 голосов
/ 25 декабря 2018

В Python if n эквивалентно if bool(n).

Для целых чисел bool(i) равно i != 0.


Если n является экземпляромкласса, тогда

  • , если класс определяет __bool__, тогда n.__bool__() называется
  • , если класс не определяет __bool__, но __len__, тогдаn.__len__() != 0 оценивается
  • , если класс не определяет ни __bool__, ни __len__, он всегда оценивается как True (думайте как n is not None).
0 голосов
/ 25 декабря 2018

Любое значение в Python может быть проверено на правду.Пока это не None, False, ноль или пусто;это считается правдой.Подробнее см. В документации .

. В вашем случае рекурсия должна прекратиться, когда n обнуляется, так как ноль не считается True.Вы можете проверить это с помощью:

if 0:
  print('zero is true') # won't be printed
else:
  print('zero is false') # will be printed
0 голосов
/ 25 декабря 2018

Обычно условия имеют вид:

if n==1:

Но это оценивается как:

if True:

Если условия правильные, то Python по умолчанию все имеет значение True, поэтому оператор передается,и так как:

bool(n)

Может быть True или False тоже, n может сделать это уже, и код будет проходить, если n True, не проходить, если n неверно, поэтому оно работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...