Помогите понять работу 'or' в данном контексте (python)
Есть цель - проверить email адреса на наличие символов (провалидировать) Пишу простой цикл с таким условием:
for _str in f.readlines():
if ',' or '(' in _str.strip():
foo()
else:
bar()
При применении данного условия функцией foo начинают обрабатываться не только строки, где действительно встречаются данные символы, а все строки подряд. Если я убираю or - всё обрабатывается правильно. С чем это связано.
Также просьба подсказать способ для обработки сразу на множество условий, типа:
if foo([',','/'], or) in _str.strip():
Можно ли применить что-то в таком духе? (Код абсолютно выдуман, но суть примерно должен передавать)
Знаю, что есть регулярки, но несколько регулярок отработали на данном массиве плохо и мне быстрее валидировать через условия
Ответы (3 шт):
Проверка в (почти) одну строчку без циклов
symbols = [",","("] # список с проверяемыми символами
if any(s in _str for s in symbols): # проверка
# do your stuff
До кучи ещё такой вариант предложу:
if any(map(_str.strip().__contains__, (',', '('))):
Просто проверяем, входит ли хоть одна строка (символ в данном случае) из кортежа в проверяемую строку.
Дело в том, что хотя синтаксис питона во многом похож на простой английский язык, вы не можете просто написать так, как если бы вы писали это на человеческом английском.
or (так же как и and) - это не просто слова, а логические операторы, которые работают по определённым правилам. Чтобы получить то, что вы хотите, вам надо писать так:
if ',' in _str.strip() or '(' in _str.strip():