Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PEP 572: The Walrus Operator

PEP 572: The Walrus Operator

A discussion on Python Governance, an introduction to PEP 572 and the walrus operator, as well as the resulting fallout.

Dustin Ingram

August 08, 2018
Tweet

More Decks by Dustin Ingram

Other Decks in Technology

Transcript

  1. AUSTIN PYTHON MEETUP
    AUGUST 2018

    View Slide

  2. HI, I'M DUSTIN

    View Slide

  3. PEP 572

    View Slide

  4. PYTHON GOVERNANCE

    View Slide

  5. BDFL
    BENEVOLENT DICTATOR
    FOR LIFE

    View Slide

  6. View Slide

  7. PEP
    PYTHON ENHANCEMENT PROPOSAL

    View Slide

  8. PEP 8
    STYLE GUIDE FOR PYTHON CODE

    View Slide

  9. PEP 8
    STYLE GUIDE FOR PYTHON CODE
    AUTHOR: GUIDO VAN ROSSUM

    View Slide

  10. PEP 20
    THE ZEN OF PYTHON

    View Slide

  11. PEP 20
    THE ZEN OF PYTHON
    AUTHOR: TIM PETERS

    View Slide

  12. PEP 566
    METADATA FOR PYTHON SOFTWARE
    PACKAGES 2.1

    View Slide

  13. PEP 566
    METADATA FOR PYTHON SOFTWARE
    PACKAGES 2.1
    AUTHOR: DUSTIN INGRAM

    View Slide

  14. BDFL
    DELEGATES

    View Slide

  15. 1) DRAFT
    2) ACCEPTANCE
    3) IMPLEMENTATION

    View Slide

  16. PEP 572

    View Slide

  17. :=

    View Slide

  18. View Slide

  19. View Slide

  20. PROBLEMS

    View Slide

  21. match = pattern.search(data)
    if match is not None:
    do_something(match)

    View Slide

  22. chunk = file.read(8192)
    while chunk:
    process(chunk)
    chunk = file.read(8192)

    View Slide

  23. foo = [f(x), f(x)**2, f(x)**3]

    View Slide

  24. y = f(x)
    foo = [y, y**2, y**3]

    View Slide

  25. results = []
    for x in data:
    result = f(x)
    if result is not None:
    results.append(result)

    View Slide

  26. filtered_data = [
    f(x) for x in data
    if f(x) is not None
    ]

    View Slide

  27. SOLUTIONS

    View Slide

  28. match = pattern.search(data)
    if match is not None:
    do_something(match)

    View Slide

  29. if (match := pattern.search(data)) is not None:
    do_something(match)

    View Slide

  30. chunk = file.read(8192)
    while chunk:
    process(chunk)
    chunk = file.read(8192)

    View Slide

  31. while chunk := file.read(8192):
    process(chunk)

    View Slide

  32. foo = [f(x), f(x)**2, f(x)**3]

    View Slide

  33. foo = [y := f(x), y**2, y**3]

    View Slide

  34. results = []
    for x in data:
    result = f(x)
    if result is not None:
    results.append(result)

    View Slide

  35. filtered_data = [
    f(x) for x in data
    if f(x) is not None
    ]

    View Slide

  36. filtered_data = [
    y for x in data
    if (y := f(x)) is not None
    ]

    View Slide

  37. WHY?

    View Slide

  38. LESS LINES
    ARE BETTER

    View Slide

  39. foo = [y := f(x), y**2, y**3]

    View Slide

  40. y = f(x)
    foo = [y, y**2, y**3]

    View Slide

  41. LESS LINES
    ARE MORE EFFICIENT?

    View Slide

  42. match = re.match(data)
    group = match.group(1) if match else None

    View Slide

  43. group = re.match(data).group(1) if re.match(data) else None

    View Slide

  44. group = match.group(1) if (match := re.match(data)) else None

    View Slide

  45. SCOPE

    View Slide

  46. foo = 'foo'
    if (foo := 'bar') is not None:
    do_something(...)
    print(foo)

    View Slide

  47. EXCEPTIONS!

    View Slide

  48. if any((comment := line).startswith('#') for line in lines):
    print("First comment:", comment)
    else:
    print("There are no comments")

    View Slide

  49. if all((nonblank := line).strip() == '' for line in lines):
    print("All lines are blank")
    else:
    print("First non-blank line:", nonblank)

    View Slide

  50. total = 0
    partial_sums = [total := total + v for v in values]
    print("Total:", total)

    View Slide

  51. =

    View Slide

  52. x = y = z = 0 # Yes
    (z := (y := (x := 0))) # No

    View Slide

  53. a[i] = x # Yes
    a[i] := x # No
    self.rest = [] # Yes
    self.rest := [] # No

    View Slide

  54. x = 1, 2 # Sets x to (1, 2)
    (x := 1, 2) # Sets x to 1

    View Slide

  55. total += tax # Yes
    total +:= tax # No

    View Slide

  56. = VS. ==

    View Slide

  57. PEP 572

    View Slide

  58. RECEPTION

    View Slide

  59. BACKWARDS
    COMPATIBILITY
    "WHERE WILL THIS WORK?"

    View Slide

  60. TEACHABILITY
    "WHAT DO WE CALL THIS?"

    View Slide

  61. ATTRACTIVENESS
    "IT'S JUST UGLY!"

    View Slide

  62. View Slide

  63. View Slide

  64. View Slide

  65. View Slide

  66. TIM PETERS:
    "THE CURRENT PROPOSAL WOULD
    HAVE ALLOWED A MODEST BUT
    CLEAR IMPROVEMENT IN QUITE A
    FEW BITS OF CODE."

    View Slide

  67. BARRY WARSAW:
    "SINCE IT CHANGES THE SYNTAX OF
    THE LANGUAGE, PEOPLE TEND TO
    FOCUS ON THAT WITHOUT
    UNDERSTANDING THE DEEPER
    SEMANTIC ISSUES."

    View Slide

  68. ŁUKASZ LANGA:
    "DICTATORS SHOULD DICTATE"

    View Slide

  69. GUIDO VAN ROSSUM:
    HAD TO STOP READING THE THREADS
    SO HE WOULDN'T "GO INSANE"

    View Slide

  70. View Slide

  71. View Slide

  72. QUESTIONS

    View Slide

  73. WHAT DOES THIS
    MEAN FOR PYTHON?

    View Slide

  74. IT'S GOING
    TO BE OK

    View Slide

  75. WILL THIS BECOME
    PART OF PYTHON?

    View Slide

  76. PROBABLY
    (IN 3.8)

    View Slide

  77. BUT I DON'T LIKE IT!

    View Slide

  78. THEN DON'T
    WRITE IT!

    View Slide

  79. IS GUIDO
    COMING BACK?

    View Slide

  80. PROBABLY NOT

    View Slide

  81. WILL THIS
    HAPPEN AGAIN?

    View Slide

  82. PROBABLY NOT

    View Slide

  83. ¯\_(ϑ)_/¯

    View Slide

  84. THANKS!

    View Slide