Форум сайта python.su
lorien, а что насчет этого (оператор or):
1.
>>> x=None
>>> y=0
>>> x or y
0
Почему он вывел 0 вместо None?
И вот еще:Читай ещё раз, что я написал выше про работу or. Он вывел второй аргумент, просто в коносоли None выводится как пустая строка, если хочешь явно увидеть None напиши так:
2.
>>> x=пустые квадратные скобки (пишу текстом, так как здесь не отображается)
>>> y=None
>>> x or y
>>>
Он не вывел ничего. Здесь нет бага/глюка? Исходя из вышесказанного, должен был вывести пустые квадратные скобки. Или они просто не отобразились?
>>> print x or y
3.Читай ещё раз, что я написал выше про работу or.
>>> x=None
>>> y=пустые квадратные скобки
>>> x or y
пустые квадратные скобки
Он их вывел в конце. Но почему не None?
4.Читай ещё раз, что я написал выше про работу or, а также ответ к пункту 2.
>>> x=пустые квадратные скобки
>>> y=пустые квадратные скобки
>>> x or y
пустые квадратные скобки
Выводит пустые квадратные скобки. А во 2 примере не выводит! Почему в случае выше он не вывел ничего, и даже ошибки не выдал?
Офлайн
0
>>> x=
>>> y=None
>>> print(x or y)
None
Точняк, None!
Здесь понятно. 1, 3 и 4 примеры понятны.
Понятно и по другим примерам!
Если 0, None, квадратные скобки или пустой список - он выводит 2 аргумент автоматически, так как первый “пуст”. И если вторым аргументом при этом стоит None, то выводится пустая строка (в консоли, на самом деле выводится None).
1) если она не равна:
- нулю,
- None,
- пустой строке,
- пустому списку,
, то он возвращает её.
2) иначе он возвращает вторую переменную при любом ее виде.
Сухая логика.
Отредактировано Kentavr (Сен. 12, 2013 14:51:32)
Офлайн
> так как первый “пуст”.
Да, если говорить более формально, то пустота означает, что если мы переменную передадим в конструктор булевого типа (bool), то мы получим на выходе False:
>>> bool(0)
False
>>> bool(None)
False
>>> bool('')
False
>>> bool({})
False
def operator_or(a, b):
if a:
return a
else:
return b
Отредактировано lorien (Сен. 12, 2013 15:09:54)
Офлайн
0
По оператору and:
>>> x=5
>>> y=2
>>> x and y
2
>>> x=5
>>> y=0
>>> x and y
0
>>> x=0
>>> y=2
>>> x and y
0
>>> x= (квадратные скобки - чтобы отличить от другого нуля)
>>> y=0
>>> x and y
квадратные скобки
Первое значение (не 0), смотрит второе. Второе (не 0) => возврат 2 переменной (не 0)
Первое значение (не 0), смотрит второе. Второе (0) => возврат 2 переменной (0)
Первое значение (не 0), (он смотрит второе?). Второе (не 0) => возврат 1 переменной (0)
Первое значение (не 0), (он смотрит второе?). Второе (0) => возврат 1 переменной (0)
Он смотрит 2 значение? Смысл ему смотреть 2 значение, если все равно при “нуле” 1 значения он вернет 1 переменную?
Отредактировано Kentavr (Сен. 12, 2013 15:11:53)
Офлайн
Вы можете сами проверить, смотрит или нет он второе значение, сделайте функцию
def some_func():
print ":-)"
return 2
Отредактировано lorien (Сен. 12, 2013 15:15:22)
Офлайн
0
Приведите пример с функцией - до этого раздела я еще не дошел.
Отредактировано Kentavr (Сен. 12, 2013 15:48:34)
Офлайн
Ну так дойдите до этого раздела, я лично никуда не тороплюсь.
Офлайн
0
1.
А с оператором not что?
Вот что получается:
>>> x=5
>>> y=2
>>> x not y
SyntaxError: invalid syntax
>>>
Понимаю, что синтаксическая ошибка, но как правильно записать выражение?
Вот еще:
>>> x=5
>>> y=2
>>> not y
False
>>> not x
False
>>>
2.
Кстати, что значит вычисление по короткой схеме?
“Операторы and и or вычисляются по короткой схеме и возвращают операнд, определяющий результат”.
Отредактировано Kentavr (Сен. 12, 2013 16:07:10)
Офлайн
0
>>> z=0
>>> not z
True
>>> z=5
>>> not z
False
Получается, он рассматривает в Булевом контексте. 0- правда, значение - ложь.
Офлайн
0
>>> x=0
>>> y=0
>>> not x
True
>>> not y
True
>>> not (x or y)
True
>>> z=2
>>> not z
False
>>> not (z or y)
False
>>> a=квадратные скобки
>>> not a
True
>>> b=None
>>> not b
True
>>> not None
True
>>> not квадратные скобки
True
>>> not 1
False
>>> not 0
True
Офлайн