Составляй выражения Python как Профи (Особенности, фишки и ошибки тернарного оператора)

  Рет қаралды 30,822

ZProger [ IT ]

ZProger [ IT ]

Күн бұрын

Пікірлер: 150
@nakamasama
@nakamasama 2 жыл бұрын
Спасибо автору, что дал мне 250 IQ. Пускай я С++ разработчик и в Питон забегаю изредка...
@zproger
@zproger 2 жыл бұрын
😎
@lexxkrt
@lexxkrt 2 жыл бұрын
во всех нормальных языках есть тернарный оператор, и даже больше, есть инкремент декремент, чего нет в питоне
@mrslashx
@mrslashx 2 жыл бұрын
возсожно можно написать модуль на С с инт функцией которая бкдет ссылку увеличевать и вот тебе инкремент почти
@ВасилийД-й2щ
@ВасилийД-й2щ Жыл бұрын
коллега по уровню iq вы не одиноки
@artemxyi
@artemxyi 5 ай бұрын
@@lexxkrt нахуй надо?есть же number -= number или также с плюсом
@maksych8690
@maksych8690 2 жыл бұрын
По поводу True or "Some". Можно использовать для установки дефолтного значения. Да, однозначно лучше проверять на None, но и этот вариант приемлемый. def func(data: dict[str, str] = None) -> None: data = data or {} ...
@ВиталийУдарцев-п2б
@ВиталийУдарцев-п2б 2 жыл бұрын
однозначно лучше избегать опциональных аргументов вообще
@MaxusR
@MaxusR 2 жыл бұрын
Полезут косяки с Falsey значениями вроде нуля или пустой строки/списка.
@MaxusR
@MaxusR 2 жыл бұрын
@@ВиталийУдарцев-п2б Опциональные аргументы повышают гибкость. Порой вместо трёх похожих по содержанию функций лучше сделать одну с опциями.
@Блинчик-н4о
@Блинчик-н4о 2 жыл бұрын
@@ВиталийУдарцев-п2б например ты пишешь бота модератора для тг. Есть встроенная функция для изменения прав участника группы, где ты в параметрах должен выбрать что должен уметь пользователь, а прав различных 13, а поменять ты хочешь всего 1- возможность отправлять гифки(а то он задолбал спамить ими). В этой функции для каждого права должна быть выделена отдельная переменная. Так вот если бы не было keyword аргументов, то тебе бы каждый раз пришлось бы вводить во все остальные права значение, которое отвечает за то, чтобы это право не поменялось. Или пришлось бы дробить 1 функцию на 13 разных, что плохо если ты хочешь поменять сразу все, или только 10 из них например. Так что keyword аргументы очень полезная вещь и я привел пример из личной практики.
@victorstelmashchuk4840
@victorstelmashchuk4840 2 жыл бұрын
Что-то я нихрена не понимаю, что сложного в строке print(a or "пусто"). Это вызывает сложности только при первом знакомстве. Зато когда становится привычным экономит много строчек кода
@alexandergrigorev4518
@alexandergrigorev4518 2 жыл бұрын
Просто ты ещё джун потом поймёшь 😁
@zproger
@zproger 2 жыл бұрын
Сложность в том, что оно выглядит не очевидно в больших проектах
@victorstelmashchuk4840
@victorstelmashchuk4840 2 жыл бұрын
@@zproger Я же говорю дело привычки. :) А как вы короче напишете вывод какой-либо переменной когда вместо None или нуля требуется какая-то строка как у меня в примере. Я соглашусь, что лучше не загромождать это вложениями друг в друга, но советовать совсем не использовать подобные конструкции по-моему не правильно
@lexxkrt
@lexxkrt 2 жыл бұрын
@@victorstelmashchuk4840 а например конструкция print(a.text if a else '') в данном случае проверяется само существование объекта, иначе вызов метода объекта вызовет ошибку. или например посложнее print(a.text if (a:=soup.select('div.someclass')) else 'No class')
@vlatterran
@vlatterran 2 жыл бұрын
Я считаю что как такое использование не логического типа данных в логических конструкция - идея плохая, ибо без контекста фиг его знает что автор имелл в виду. Если написать if a, то я сразу предпологаю что а - это булева переменная, а если написать if len(a) >0, то сразу понятно что а это некая коллекция, у которой есть длинна. И сравнивать с нулём я тоже считаю необходимым, ибо когда ты видишь что идёт прямое сравнение с нулём, тебе не надо вспоминать что 0 - это ложь.
@gbk_youtube5448
@gbk_youtube5448 2 жыл бұрын
Момент 5:23 Попытался сам разобраться в коде: status = True #Присваиваем переменной status значение True или же 1 connect_label = ("1.0", "2.0")[status] #берём из кортежа значение с индексом status(1) в нашем случае "2.0" print(f"Server version: {connect_label}") #выводим на экран строку со значением которое присвоили на второй строке Я написал это ещё не досмотрел видео, так что я не говорю что это правильно
@n1kit1
@n1kit1 2 жыл бұрын
касательно последнего, был у меня ещё опыт использования and в подобном примере, крч например, вы хотите проверить условие, и если оно верно то вызвать функцию, тут как раз это пригодится, к примеру: os.path.isfile("cache.dat") and not os.remove("cache.dat") and print("Кэш очищен.") удалит файл если он существует и если удалит то напечатает "кэш очищен" иначе ничего не напечатает. никто не запрещает продолжать эту цепочку, стоит помнить что not имеет самый высокий приоритет, and - средний, а or - низший, то есть сначала выполнятся все not, потом проверятся все and и только потом пойдут or.
@brawlerx1240
@brawlerx1240 2 жыл бұрын
а подскажите пожалуйста как читать эти ошибки __main__.class object at ........
@indlborm
@indlborm 2 жыл бұрын
В копилку стоит добавить неопределенность типов данных. Пример: x=2 y = x/2 if x//2 == 0 else (x//2 + 1) При четных x будет int. При нечетных -- float.
@frand2158
@frand2158 2 жыл бұрын
А разве не наоборот?
@AntiCureshow
@AntiCureshow 2 жыл бұрын
не пизди сука
@sadandpathetic
@sadandpathetic Жыл бұрын
В твоём примере и при чётных, и при нечётных будет тип int (за исключением чисел 0, 1 и с плавающей точкой). Если в этом примере целочисленное деление заменить на остаток от деления, то при нечётных будет int, а при чётных float, что довольно очевидно из-за наличия целочисленного деления только в одном из блоков if-else
@metasy_
@metasy_ 2 жыл бұрын
насчет True or "Some", это можно использовать если первое значение может вернуть None и нужно его заменить на другое более подходящее
@NotxctQ
@NotxctQ 6 ай бұрын
Поддерживаю, например в answer = input("Enter text: ") or "default" удобно для подстановки дефолтного ответа 7:26
@jurissiberian7568
@jurissiberian7568 2 жыл бұрын
Тернарные операторы не обязательно использовать для получения вычисленного значения. К примеру: func1() if else func2().
@n1kit1
@n1kit1 2 жыл бұрын
В этом случае лучше будет использовать обычные условия, так как они не сохранят значения выражения, что будет работать быстрее, проверял лично.
@Rejgan318
@Rejgan318 2 жыл бұрын
func1 и func2 здесь со скобками. То есть вызов этих функций, которые что-то возвращают, то есть вычисляемое выражение. Пример неудачный. И вообще с точки зрения питона - везде объекты. Так что нет большой разницы между func1 (без скобок, без вызова) и, например 5 или "Hello"
@winder-krons
@winder-krons 2 жыл бұрын
Хм, спасибо за видео. Данными конструкциями я пользуюсь часто, когда упрощаю обычный if/else, с подводным камнем все просто, не использую данную конструкцию :) 5:22 почему только люди с высоким IQ?) Я думаю, что это очевидно, сразу понятно, что True и False это 1 и 0, если некоторые, конечно, знают/не забыли 7:00 Интересно, но да, в большом коде будет трудно понять, либо легко допустить ошибку, если такого много
@wasd1338
@wasd1338 2 жыл бұрын
По вопросу на 5.25. если булевые значения проверить на принадлежность к классу int - isinstance(True, int) вернёт так же True как и если проверить isinstance(True, bool), потому что bool является дочерним классом от класса int, поэтому не удивительно что они могут работать как int) я хочу сказать что обозначение булевых за 0 и 1 это в данном случае не просто условность из области логики, это в том числе реализовано в кишках языка
@ЙенФенФыр
@ЙенФенФыр 2 жыл бұрын
04:30 - в чём заключается подводность того, что случится ошибка, если поток дойдёт до кода, выдающего ошибку?
@robeenx
@robeenx 2 жыл бұрын
2:34 если первое условие False, второе условие через and даже не будет проверяться. Пример: assert 0 if 0 and 1 / 0 else 1 # 1
@TrueSentiago
@TrueSentiago Жыл бұрын
7:25 Любое непустое значение == True
@CrossBend
@CrossBend Жыл бұрын
5:24 = а! дак это обращение к картежу по индексу. на сколько я понимаю, коллекции в памяти хранятся +/- одинаково, а их особенность как раз доступ по индексу (не считая множества)
@dmpn7427
@dmpn7427 Жыл бұрын
5:25 - проверяю айкью: возвращает первое значение, если в квадратных скобках True... пошёл смотреть дальше
@elastvd7503
@elastvd7503 2 жыл бұрын
Супер, спасибо!!
@harlok13
@harlok13 2 жыл бұрын
в исходном коде джанго встречаются такие конструкции True or "Some". например, reverse() из django.urls
@alexandrkononenko7872
@alexandrkononenko7872 2 жыл бұрын
как ты пишешь вместо >= и != то что ты пишешь. как ты заменил операторы?
@СергейШирнин-е1р
@СергейШирнин-е1р 2 жыл бұрын
7:15 нужно очень много времени? Чтобы понять что and это false seeker и при отсутствии false он вернет последний true, а or это true seeker и при отсутствии true он вернет последний false? Честно совсем не понял в чем конкретно для python сложность такой записи.
@qwertymangames1800
@qwertymangames1800 Жыл бұрын
На "or" не гони. В lua это единственный способ задать параметр по умолчанию в начале функции, например так: x = x or 1 Или использовать тернарный оператор: x = x or 1 and 0 - что гораздо понятнее того "тернарного оператора" через if что приводится в python. Ведь эта конструкция гораздо более читаемая и имеет тот же порядок как и например тернарная операция в C#
@TheNikita
@TheNikita 2 жыл бұрын
Давно не писал комментариев в поддержку канала, видео очень классное и информативное! Но есть вопрос как ты сделал >= одним символом?
@zproger
@zproger 2 жыл бұрын
Это не я, это IDE форматирует так =)
@TheNikita
@TheNikita 2 жыл бұрын
@@zproger Понял, надо будет обновить pycharm :)
@live-superdulia9097
@live-superdulia9097 Жыл бұрын
Добрый день! Очень интересное видео) Не знаете, есть ли подобные способы написания конструкции try except в одну строчку?
@artembagachkov933
@artembagachkov933 2 жыл бұрын
3:33 вам даже не нужна будет обфускация 😂
@zproger
@zproger 2 жыл бұрын
=)
@evgeniyevgeniy8352
@evgeniyevgeniy8352 2 жыл бұрын
2:23 Это просто неправда. Он не проверяет условие 1>2 и если оно верно, то возвращает 1. Он работает так: 1) Проверяет условие "1>2 and 1>3". Оно False, поэтому вычисляется значение справа он первого else. 2) Проверяет условие "2>3". Оно False, поэтому возвращается значение после второго else, которое равно 3.
@eugene_na_tytrube
@eugene_na_tytrube 2 жыл бұрын
В данном случае лишь ошибка у автора в том, что у него оператор and, а с ним, если бы 1>2 было бы истинным, действительно сначала бы вторая часть условия проверялась бы, т.к. and, по сути, останавливает свое выполнение после первого ложного значения, если таковое есть, или вычисляет все, если ложных значений нет. А вот если бы был оператор or, то единица была бы выведена сразу после вычисления 1 > 2 (при условии, что считаем его истинным), без вычисления всех остальных выражений, как и говорится в видео. Тут хорошо моржовый оператор подойдет для экспериментов: (a := 1) if ((b := 1 + 2) or (c := 3 + 5)) else (d := 2) после вычисления данного выражения, будут существовать только переменные а и b, т.к. будут выполнены только выражения с ними. Если поменять or на and, то и переменная с появится, т.к. и ее выражение будет вычислено.
@vrabosh
@vrabosh 2 жыл бұрын
True and "истина" or "иначе" Мне такой вариант больше нравиться, чем if else
@Omskiy_vinokur
@Omskiy_vinokur 2 жыл бұрын
Прохожу курс по питону там такого много так что всё легко
@zproger
@zproger 2 жыл бұрын
=)
@rokot
@rokot 2 жыл бұрын
У меня вопрос. Есть ли альтернатива Try Except. У меня модуль для пользователя. Внутри много функций. Пользователь, обращаясь к функции может указывать какие-то параметры, а может не указывать. Это сокращает код для пользователя. То есть какие-то параметры не являются обязательными. Чтобы так получилось, внутри функции идёт обращение к функциям, где прописан try except, если пользователь указал параметр, то срабатывает try, если нет, то except назначает свой по умолчанию. Всё хорошо, всё работает, но визуально огромная простыня из этих функций try except. Match case попробовал, чего-то не получилось, не работает.
@eugene_na_tytrube
@eugene_na_tytrube 2 жыл бұрын
Так для этого же существует возможность задать параметры со значением по умолчанию. Там есть только тонкость, если значением является изменяемый тип, то по умолчанию задают None и уже в теле функции задают дефолтное значение. Но там никаких try-except не нужно, обычным if сразу вначала тела функции проверяется все и назначается. Ну и еще, для имитации switch-case из других языков, кроме констркций if-elif-else, так же используют словари. Try-except тут зачем? Эта конструкция нужна для отлова и обработки ошибок.
@n1kit1
@n1kit1 2 жыл бұрын
А вот ещё для разбора, постарался помудрить для искушённого зрителя: FR = [72, 101, 108, 108, 111], try: FR[0] += 0o40, except TypeError: FR += [lambda s: FR'%c'%s, 87, 111, 114, 108, 100, 33], finally: FR = iter(FR) [(*O, s), (I, *l)], = FR, print(*(I(s) for s in O), I(s), *(I(s) for s in l), sep='')
@holodina
@holodina 2 жыл бұрын
# создание кортежа с вложенным списком в котором коды символов из таблицы ascii FR = [72, 101, 108, 108, 111], # 72(H), 101(e), 108(l), 111(o) try: # добавление символа пробела, в конец вложенного списка кортежа FR[0] += 0o40, # 0o40 == 32 коду символа из таблицы ascii except TypeError: # добавляем в кортеж второй вложенный список и в этот список мы добавляем # функцию для форматирования char символов и коды символов из таблицы ascii # FR на печать не выводится, оно не часть строки, а задаёт ей поведение # F Форматная строка(хотя используется старый способ форматирования через знак процента) # R Сырая строка(подавление экранирования), используется обычно для регулярных выражений FR += [lambda s: FR'%c' % s, 87, 111, 114, 108, 100, 33], # 87(W), 111(o), 114(r), 108(l), 100(d), 33(!) finally: FR = iter(FR) # преобразование кортежа в объект итератора [(*O, s), (I, *l)], = FR, # распаковка через listcomp. # В "O" распаковываем первый список без последнего элемента, последний элемент распаковывается в "s" # В "I" распаковывается функция форматирования из второго списка, а в "l" оставшаяся часть его часть # Задаем sep(separator - разделитель) равный ""(пустой строке), по дефолту sep=" " # Используя генераторное включение(gencomp) создаем объект генератора # *(I(s) for s in O) Итерируемся по списку "O" и значения списка прогоняем через функцию форматирования "I" # Получившийся генератор распаковываем и получаем первое слово Hello # I(s) Вызываем функцию форматирования "I", которой передаем код символа пробела (32 или же 0o40) из "s" # И получается после Hello у нас пробел, который используется в качестве разделителя # И снова используем gencomp и получаем объект генератора # *(I(s) for s in l) Снова итерируемся по списку "l" и значения списка прогоняем через функцию форматирования "I" # И вновь распаковываем этот генератор и получаем слово World! print(*(I(s) for s in O), I(s), *(I(s) for s in l), sep='') # напечатать слово Hello World! Ну как?
@n1kit1
@n1kit1 2 жыл бұрын
Ну идеально конечно.
@DERJNDZE
@DERJNDZE 2 жыл бұрын
Прикол, а мы в мгу про ленивость and и or изучили довольно рано, в особенностях языка еще. По сути, помогает в основном только в процессе создания проклятых однострочечных амальгаций на 400 колонок, но иногда бывает полезным и в более обыденных вещах
@fedorrasputin3782
@fedorrasputin3782 2 жыл бұрын
Какая ОС используется в видео ?
@zproger
@zproger 2 жыл бұрын
Zorin OS
@fedorrasputin3782
@fedorrasputin3782 2 жыл бұрын
Довольно удобна ОС. Было бы интересно послушать Ваш вариант ее настройки для комфортной работы.
@metasy_
@metasy_ 2 жыл бұрын
сразу не понял, но понял до объяснения фичи с ("1.0", "2.0")[True]
@zproger
@zproger 2 жыл бұрын
Круто =)
@fidgerrr
@fidgerrr 2 жыл бұрын
Привет, что за тема для PyCharm?
@zproger
@zproger 2 жыл бұрын
Github Dark
@fidgerrr
@fidgerrr 2 жыл бұрын
@@zproger спасибо
@luispakvard5681
@luispakvard5681 2 жыл бұрын
True приводиться к 1 поэтому ("1.0","2.0")[True] выбирает 2.0 по индексу 1 -> Server version:2.0 Правильно?
@МаксимМеснянкин-л6и
@МаксимМеснянкин-л6и 14 күн бұрын
Насчёт нечитаемых вложенных тернарников - в университете ИТМО нас заставляют за пол минуты отвечать, что выведет такой код. Вот так вот учат разработке в "одном из лучших" ВУЗов
@luispakvard5681
@luispakvard5681 2 жыл бұрын
А с True or "Some" и False or "Some" то оба если одно из 2х имеет значение True то и результат будет True а print выводит 1е трушное встреченое значение в 2м варианте трушное встреченое значение "Some" в 1м True правильно ?
@alexandermartin5694
@alexandermartin5694 2 жыл бұрын
Код нужно комментировать, тогда все практики приемлемы. Сложный код, там где одно действие имеет множество последствий, без комментариев в любом виде будет сложно понять.
@zproger
@zproger 2 жыл бұрын
Комментарии важны, это да
@vasiliynet3425
@vasiliynet3425 Жыл бұрын
Неявное приведение типов, не только "плохое решение питониста") а вообще штука с подводными камнями, особенно в языках с нестрогой типизацией, JS уже прославился своими шутка типа 1 + '1' = 11; 1 * '1' = 1 )
@jackmoral9127
@jackmoral9127 2 жыл бұрын
вот тут тоже интересно какая комбинация клавишь нужна чтобы >= в один символ вписать, походу клаву перенастроить нужно раз такой синтаксис работает, ща прогуглю)
@eugene_na_tytrube
@eugene_na_tytrube 2 жыл бұрын
Шрифт нужно искать, с поддержкой подобных лигатур, а не клавиатуру настраивать.))
@super_man-ArtOfWar3
@super_man-ArtOfWar3 2 жыл бұрын
5:25 ОООООО У МЕНЯ ОКАЗЫВАЕТСЯ IQ ВЫШЕ 250
@zproger
@zproger 2 жыл бұрын
Да, это официальная статистика
@Tiwula
@Tiwula 2 жыл бұрын
В Lua частенько использую true and "a" or "b", не считаю это чем то сложным и не обычным)
@qwertymangames1800
@qwertymangames1800 Жыл бұрын
В lua это единственный доступный тернарный оператор. По работе очень похож на тернарный оператор из C#. И к счастью в lua нет этого кривого оператора из python через if который непонятно для кого вообще придумали. Где ответы размазаны слева и справа. Это странно. Вопрос ориентации python разработчиков всё ещё открыт.
@lexxkrt
@lexxkrt 2 жыл бұрын
что за символ такой больше равно?
@zproger
@zproger 2 жыл бұрын
Так IDE форматирует
@KVAatHome
@KVAatHome 2 жыл бұрын
При работе с БД в Odoo достаточно часто в возврате стоит: a and a.a or None или нечто похожее. Обычная практика.
@cnhfgjy
@cnhfgjy 2 жыл бұрын
Ничего не понял, но буду разбираться...
@zproger
@zproger 2 жыл бұрын
=)
@gta_KaskaD
@gta_KaskaD 2 жыл бұрын
1:29 как зделать такой >=
@zproger
@zproger 2 жыл бұрын
Это IDE так делает =)
@gta_KaskaD
@gta_KaskaD 2 жыл бұрын
@@zproger это не pyCharm?
@zproger
@zproger 2 жыл бұрын
Это Pycharm. Возможно цветовая тема так делает. Это Github Dark если что
@metasy_
@metasy_ 2 жыл бұрын
@@zproger это Pycharm автоматом делает на любой теме, и я думаю это фишка JetBrains потому что не только в Pycharm такая штука
@holodina
@holodina 2 жыл бұрын
@@metasy_ в пайчарм комьюнити эдишене нет такого
@Hloredea
@Hloredea Жыл бұрын
5:56 ниче се такого я даже не догодался использовать в коде
@Hloredea
@Hloredea Жыл бұрын
Стоп че за херня там чё первое значение из условия выводится всегда?
@nakidai
@nakidai 2 жыл бұрын
1:28 Ага, а еще вместо объявлении функции приписать abs = lambda number: то вообще в 0 строк решение!
@grriimx
@grriimx 2 жыл бұрын
Как тема называется?)
@zproger
@zproger 2 жыл бұрын
github dark
@luckytima2315
@luckytima2315 2 жыл бұрын
Вы меня обманули, вы пользуетесь зорином на постояной основе)))
@zproger
@zproger 2 жыл бұрын
Ну для видео да, это виртуалка для записи =)
@northersan6669
@northersan6669 8 ай бұрын
print("Bob" * True + "Pope" * False or "Miss") а так? :D
@godlunt
@godlunt 2 жыл бұрын
3.10 тоже не понимаю в чем сложность понять, там же в первом идем по пунктам ==легко, во втором пользуемся банальными математическими правилами. Вероятнее всего такой подход сложнее понять при большом опыте программирования, однако школьникам и студентам вероятнее всего также пользоваться данными методами будет проще
@godlunt
@godlunt 2 жыл бұрын
Огромный респект за видос, ты крут, спасибо за все что делаешь!
@nemofosix5015
@nemofosix5015 Жыл бұрын
Трудночитаемо
@lexxkrt
@lexxkrt 2 жыл бұрын
есть же замечательная конструкция ?: но питон идет по своему пути. пусть будет свой путь но почему бы не использовать конструкцию из других языков тоже. ну и по поводу этого оператора когда 2 недели назад начал изучать питон это первый оператор который меня интересовал и эту конструкцию сразу же нашел, как можно ей не пользоваться, только если ты из бейсика пришел
@zproger
@zproger 2 жыл бұрын
Ну не во всех языках же есть такая конструкция, иногда делают свою реализацию, а так конечно было бы круто если бы во всех япах оно работало одинаково
@lexxkrt
@lexxkrt 2 жыл бұрын
@@zproger ну в питоне много конструкций и их следует использовать, а бейсик стиль следует выбросить из головы как дурной пример программирования
@Karaku228
@Karaku228 2 жыл бұрын
Учу питон около двух месяцев и обо всем этом знаю. Это что получается, я уже профи и могу устраиваться на работу?
@zproger
@zproger 2 жыл бұрын
Думаю пора бы уже написать свою ОС с нуля 🙃
@Hloredea
@Hloredea Жыл бұрын
5:20 наверно 2.0 потому что True == (1 and "a"); False == (0 and "")
@Hloredea
@Hloredea Жыл бұрын
Найс...
@SrLju
@SrLju 2 жыл бұрын
Я себя, конечно, гением не считаю, но я все эти примеры легко понимаю и сомневаюсь, что код, запутанный этими конструкциями, вообще никто не поймёт. Я думаю достаточно просто знать о таких конструкциях, чтобы такой код понять.
@ТимонЯблоков
@ТимонЯблоков 2 жыл бұрын
Да только вот обычный if с правильной вложенностью и отступами быстрее читается, а на том же рефакторинге чем быстрее читается код тем лучше. Лучше уж потратить в два раза больше места коде, чем потом в два раза больше времени читая код в одну строку.
@QwDragon
@QwDragon 2 жыл бұрын
@@ТимонЯблоков ничего не лучше.
@eugene_na_tytrube
@eugene_na_tytrube 2 жыл бұрын
Чаще всего трудность с ними возникает у тех, у кого с английским не очень все хорошо. Тернарник (если конечно в него не запихали кучу условий, но это и для просто предложения на человеческом языке имеет место), читается как простая фраза на английском. Плюс, если брать пример из видео, где в тернарном операторе еще и логические выражения внутри - то и он легко бы читался, если бы эти выражения просто в скобки заключили, обозначив приоритет операций. Почему-то это часто стесняются делать. 1 if (1 > 2 and 1 > 3) else 2 if (2 > 3) else 3 заметно легче мозгу обработать, чем 1 if 1 > 2 and 1 > 3 else 2 if 2 > 3 else 3, т.к. во втором случае, ему еще приходится дополнительно приоритеты операций обрабатывать. Хотя вложенные тернарники лучше не использовать, тут if-elif будут наглядней.
@jdjsjsbd
@jdjsjsbd Жыл бұрын
понять то все поймут, дело во времени
@MaxusR
@MaxusR 2 жыл бұрын
Ура! Мой IQ больше 250!
@zproger
@zproger 2 жыл бұрын
ура
@01011968Desgner
@01011968Desgner 2 жыл бұрын
Автор точно программист? Многое из показанного просто упирается в понимание работы тех или иных операторов. С заявки про мой высокий IQ - реально орнул!)))) А если еще *args и **kwargs применить, то вообще капец программированию?))))
@zproger
@zproger 2 жыл бұрын
Сказал первое что в голову пришло)) Просто часто видел комментарии к этим выражениям, что многие не могли их понять, это говорит о том, что большинству оно трудно дается =)
@MaxusR
@MaxusR 2 жыл бұрын
Ну даже если разобраться можно, то всё равно количество усилий для понимания этого кода не стоит той пользы, которую это уменьшение размера кода даёт. Я про особо извращённые конструкции конечно же.
@vladhanov1530
@vladhanov1530 Жыл бұрын
Тот случай когда видео очень растянуто
@kotenok6919
@kotenok6919 2 жыл бұрын
or выше гор. Да я люблю сидеть в отладчике 10 дней, и что?
@zproger
@zproger 2 жыл бұрын
Бывает =)
@donfedor007
@donfedor007 2 жыл бұрын
Версия сервера 2.0
@Hloredea
@Hloredea Жыл бұрын
7:00 ну как бы (1 == 1 or 2 == 2) == True; (1 == 0 or 1 == 1) == True тоже. Логика лол..
@Hloredea
@Hloredea Жыл бұрын
Про вывод истинного значения из условия я не знал
@Hloredea
@Hloredea Жыл бұрын
А я думал все могут нормально прочитать это однострочное условие..
@n1kit1
@n1kit1 2 жыл бұрын
К слову, по аналогии с or - and вернёт первое ложное значение или последнее истинное если условие истинно. Например: '' and 0 and True == '' -1 and 0 and "Ф_Ф" is 0 1 and 2 and 3 is 3
@stupiddudelive1893
@stupiddudelive1893 2 жыл бұрын
Ля, мой iq 249. Абидна...
@zproger
@zproger 2 жыл бұрын
=(
@shuvimoro4869
@shuvimoro4869 2 жыл бұрын
Аааааааааааа Я понял пример с "Server version" X = True print("iq > 250") if X else print("iq
@yinyang1529
@yinyang1529 2 жыл бұрын
у меня IQ 200 😎😎😎
@zproger
@zproger 2 жыл бұрын
Да 😎
@mammadalimammadaliyev6105
@mammadalimammadaliyev6105 2 жыл бұрын
Тернарный оператор можно еще усложнить и циклом. [x for x in (1,2,3) if x % 2 == 0 else None]. еще более нечитабельный код)
@ЙенФенФыр
@ЙенФенФыр 2 жыл бұрын
хм... это сарказм?
@zproger
@zproger 2 жыл бұрын
Это уже немного другое
@eugene_na_tytrube
@eugene_na_tytrube 2 жыл бұрын
Судя по записи неработающего list comprehension, нечитаем но для Вас по причине, что Вы ни с тем, как работают камприхеншены не разобрались, не с сутью того, чем является тернарный оператор. Рабочий вариант выглядит так [x if x % 2 == 0 else None for x in (1, 2, 3)] - выражение, результат которого попадает в итоговый список (коим в данном случае является выражение с тернарником), должно стоять на первом месте в камприхеншене. И читаются камприхеншены, если в них не запихивать несколько уровней сложности, гораздо лучше аналогичного простого цикла.
@СпециальныйагентСтивенс-ФБР
@СпециальныйагентСтивенс-ФБР Жыл бұрын
Я как специалист эксель на питон написал программу.... нах мне нуже твой нейм фо немн? Объясни мне пожалуйста? Она та программа прекрасно работает.. ты как старый дед
@ЙенФенФыр
@ЙенФенФыр 2 жыл бұрын
половина ролика вообще не про тернарный оператор...
@yuzu-dev
@yuzu-dev 2 жыл бұрын
Первый!
@zproger
@zproger 2 жыл бұрын
=)
@frand2158
@frand2158 2 жыл бұрын
Ну про ошибки это дичь. Это интерпретируемый язык блин, чего вы ожидали
@Anonymous00754
@Anonymous00754 7 ай бұрын
у меня айку больше 150 ))))))))))))
@damirasanov8993
@damirasanov8993 2 жыл бұрын
Первый
@zproger
@zproger 2 жыл бұрын
=)
@fliksudnone4760
@fliksudnone4760 2 жыл бұрын
Внимание вопрос: для кого это видео?
@zproger
@zproger 2 жыл бұрын
Для кого-то =)
@fliksudnone4760
@fliksudnone4760 2 жыл бұрын
@@zproger Ну вообще я могу сильно раскритиковать это видео, но не буду, т.к слишком долго =)
@eagold
@eagold 2 жыл бұрын
так аналог ?: в c#
@Strqwerty
@Strqwerty 2 жыл бұрын
Спасибо за 250 индекс iq. Я оценил себя по другому и теперь отписываюсь.
Уроки Python с нуля / #10 - Словари (dict) и работа с ними
16:10
Школа itProger / Программирование
Рет қаралды 259 М.
Beat Ronaldo, Win $1,000,000
22:45
MrBeast
Рет қаралды 158 МЛН
Cat mode and a glass of water #family #humor #fun
00:22
Kotiki_Z
Рет қаралды 42 МЛН
We Attempted The Impossible 😱
00:54
Topper Guild
Рет қаралды 56 МЛН
Protocol Or ABC In Python - When to Use Which One?
23:45
ArjanCodes
Рет қаралды 206 М.
18 Фишек Python о которых мало кто говорит
14:13
Основы php.  Регулярные выражения.  Часть 1
33:02
web - с нуля до профи
Рет қаралды 14 М.
ТОП 5 Ошибок в написании функций Python
12:46