Почему переменная строкового типа считается булевой в Python? - PullRequest
1 голос
/ 13 мая 2011

В коде ниже:

def modify_note(self):
    id = input("Enter a note id: ")
    memo = input("Enter a memo: ")
    tags = input("Enter tags: ")
    if memo:
       self.notebook.modify_memo(id, memo)
    if tags:
       self.notebook.modify_tags(id, tags)

memo и tags - переменные строкового типа. Как вы можете написать их после, если Python считает их здесь логическими?

Ответы [ 3 ]

8 голосов
/ 13 мая 2011

Каждый объект в Python имеет значение истины . Строки True, если они не пустые.

6 голосов
/ 13 мая 2011

Операторы if memo и if tags проверяют достоверность переменных memo и tags.

Любой объектможет быть проверен на значение истинности, для использования в условиях if или while или в качестве операнда булевых операций ниже.Следующие значения считаются ложными:

  • None
  • False
  • ноль любого числового типа, например, 0, 0L, 0.0, 0j.
  • любая пустая последовательность, например, '', (), [].
  • любая пустая привязка, например, {}.
  • экземпляры пользовательских классов, если класс определяет метод __nonzero__() или __len__(), когда этот метод возвращает целое число ноль или bool значение False.

Все остальные значения считаются истинными, поэтому объекты многих типов всегда являются истинными.

0 голосов
/ 13 мая 2011
...