Jakie problemy rozwiązują nowe funkcje Pythona 3? [Zamknięte]

18

Nowe funkcje Python 3 mówią:

naprawiamy głównie znane irytacje i brodawki oraz usuwamy wiele starych cruft

Wspomina, co jest inne (poprawka), ale nie dlaczego (problemy). Nie znalazłem problemów. Jakie problemy rozwiązały poprawki?

użytkownik712092
źródło
1
Jednak jedna brodawka, której nie usunęli, jest powodem do przekazania „jaźni” metodzie klasowej. Niepowodzenie pociągu.
Rig

Odpowiedzi:

11

Wymienię tylko te, które przychodzą mi na myśl od razu.

  • Argumenty zawierające tylko słowa kluczowe: Opisane w uzasadnieniu PEP.
  • nonlocal: Bez tego zamknięcia nie mogą zastąpić zamkniętych zmiennych. Potrzeba ta pojawia się od czasu do czasu w przypadku dekoratorów i innych funkcji wyższego rzędu. Jedyne rozsądne obejście (bez przełączania zewnętrznego interfejsu API), polegające na przechowywaniu dowolnego stanu zmiennego, jaki chcesz w obiekcie zmiennym, jest nadmiernie brzydkie.
  • Słownik i zbiory zestawów: Tworzenie słowników i zestawów w sposób podobny do zestawień list jest mniej ładny i nieco wolniejszy, gdy odbywa się to za pomocą zestawień generatorów. Umożliwia nam korzystanie z tych typów tam, gdzie są one odpowiednie, bez dodatkowych kosztów. To samo dotyczy zestawu literałów, zwłaszcza intestów (od Python 3.2 są one również optymalizowane przez optymalizator wizjera).
  • W Pythonie 2 istniały literały ósemkowe, ale 0777notacja jest pułapką dla tych, którzy się do nich nie przyzwyczaili (w innych kontekstach dodanie wiodącego zera nie zmienia ani wartości, ani podstawy).
  • Literały binarne przydają się do bitów, nawet więcej niż literały szesnastkowe.
  • Literały bajtowe są objawem wymuszonego rozróżnienia między ciągami znaków Unicode i ciągów bajtów, a literały ciągów znaków są Unicode. Zmiany te zmuszają do myślenia o różnicy między tekstem a nieinterpretowanymi danymi binarnymi oraz o kodowaniu. Ma to znaczenie, ponieważ w przeciwnym razie potrzebujesz obszernych testów (z wejściami, które mówią nam po angielsku, głupcy z Europy / Ameryki rzadko o tym myślą), aby znaleźć błędy związane z kodowaniem.
  • except ex, var-> except ex as varnaprawia typowy błąd except ValueError, IndexError(powinien złapać oba, ale tylko przechwytuje pierwszy i zastępuje nazwę IndexErrorprzechwyconym wyjątkiem).
  • Określanie zakresu list: Unikaj zanieczyszczania przestrzeni nazw i pozwól im myśleć o nich w kategoriach wyrażeń generatora.
  • Usunięta składnia i moduły: przybliż nas do „Powinien istnieć jeden - a najlepiej tylko jeden - oczywisty sposób”. i pozwala uniknąć osób, które mają słabe samouczki, trzymających się starego i zepsutego sposobu naprawiania rzeczy.

źródło