Почему переменная строкового типа считается булевой в Python?

1

В приведенном ниже коде:

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 считает их логическими здесь?

  • 0
    Это Python 3.x? input() имеет различное значение в 2.x и 3.x.
  • 2
    Просто примечание: если вы не используете Python 3, будьте осторожны с input ()! Это не то же самое, что raw_input, так как он оценивает любой вводимый вами текст, эквивалентный eval (raw_input ())!
Показать ещё 2 комментария
Теги:
string
boolean
condition

3 ответа

6
Лучший ответ

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

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

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

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

  • 0
    но в этом коде нет способа ввести пустую строку для тегов и переменных memo. что означает, что они всегда будут правдой. правильно?
  • 1
    @alwbtc: Если пользователь сразу нажмет ввод, вы получите пустую строку, так как символ новой строки не включается в возвращаемое значение.
8

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

0

Все зависит от версия правды Python

Ещё вопросы

Сообщество Overcoder
Наверх
Меню