У меня есть некоторый опыт программирования на других языках, но я изучаю курс Core Python от Pluralsight, чтобы противопоставить языковые возможности. В разделе итерируемых предметов преподаватель создал эту функцию, которая использует принцип EAFP, чтобы вызвать исключение, если итеративный аргумент пуст:
def first(iterable):
iterator = iter(iterable)
try:
return next(iterator)
except StopIteration:
raise ValueError("iterable is empty")
Я видел это и думал: «Разве я не мог просто поднять это исключение в предложении else? Итак, я написал эту функцию:
def first(iterable):
if(len(iterable) == 0):
raise ValueError("iterable is empty")
else:
return iterable[0]
При написании этого поста я обнаружил вопрос переполнения стека о неявной глупости пустого списка и думал, что я мог бы реорганизовать свой код, чтобы сделать его еще более pythoni c:
def first(iterable):
if not iterable:
raise ValueError("iterable is empty")
else:
return iterable[0]
Они, кажется, работают так же, и мой по-прежнему использует принцип EAFP, верно? первый быстрее? Или это просто демонстрация функций iter () и next ()?