булево как бы условие - PullRequest
       24

булево как бы условие

0 голосов
/ 25 января 2020

Привет, я новичок в python и хотел бы подтвердить, как переменная с логическими значениями работает в операторе if-else.

def fun(a, b, reverse):
    if reverse:
        print(b, a)
    else:
        print(a, b)

Здесь 'reverse' может быть либо True, либо False. Так могу ли я сказать, что по умолчанию «если обратный» - это просто «если обратный - это Истина»?

Потому что, строго говоря, я не вижу, как «если какой-то логический тип» на самом деле фиксирует значение логической переменной. (к 'если какое-либо логическое значение оценивается как True')

Любая помощь приветствуется!


Редактировать: Извинения Я понимаю, что этот код прост. Пожалуйста, игнорируйте предыдущий пример. Я буду использовать этот, который точно передает мой вопрос.

def is_even(i):
    return i%2 == 0
for i in range(20):
    if is_even(i):
        print(i, 'is even')
    else:
        print(i, 'is odd')

Я хотел бы подтвердить это: здесь is_even () переносит аргумент i в предложение if-else. Если is_even (i) оценивается как True, то выполняется код под оператором if. Если False, тогда мы переходим к коду под оператором else.

Интересно, если по умолчанию, когда у нас нет 'if bool = true:', а просто 'if bool', if-код получает результат 'bool = True'; else-code принимает результат 'bool = False'?

Извините за проблемы, поскольку я только что обнаружил, что в предыдущем примере уже есть логическое значение, подтвержденное в аргументе; но в этом случае логическое значение известно только после итерации l oop для каждого i.

Ответы [ 2 ]

2 голосов
/ 25 января 2020

if x: считает x логическим значением. Это похоже на (для целей этого обсуждения, идентично) приведение x к логическому (то есть bool(x)).

Небулевы объекты могут анализироваться как True или False когда мы пытаемся преобразовать их таким образом - мы называем их Истиной или Ложью. Например:

  • целые числа ложны, когда они равны 0, и истинно в противном случае
  • Пустая строка '' ложна, все остальные строки истинны
  • Все коллекции (list, dict, set и др. c.) являются ложными, если они пусты, и правдивыми, когда непустые
  • None являются ложными. Большинство не None объектов оцениваются как истинные по умолчанию, если не было установлено другое поведение (как в трех вышеупомянутых случаях).

В вашем случае, как отвечает @AshkayNevrekar, вы можете дать False как значение по умолчанию для аргумента reverse в вашей функции. Таким образом, вызывающий абонент может вызвать fun() без указания reverse, и это ничего не изменит; или они могут передать любое истинное значение , и оно будет полностью изменить аргументы.


Если вы хотите по какой-либо причине проверить, является ли ваш аргумент является точно логическим значением (и не только правдивым или ложным), тогда вы можете сделать if x is True: или if x is False:; значения True и False являются синглетонами, и единственно возможные значения bool. Это предотвратит срабатывание условия, если, например, ему дано истинное целое число.

0 голосов
/ 25 января 2020

IIU C, вам необходимо вернуть значения и вернуть обратно

def fun(a, b, reverse=False):
    if reverse:
        return b,a
    return a, b

a,b = fun(a,b,True)
...