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

Dustin Ingram - PEP 572: The Walrus Operator

Dustin Ingram - PEP 572: The Walrus Operator

In this talk, we'll learn about a highly controversial change to Python syntax, the rationale for it, and the fallout as the result of it.

Along the way we'll go in-depth on how new ideas about Python are proposed, discussed, and become part of the language, what's unique about Python's process compared to other open source projects, and recent developments and what they mean for the future of the wider Python community.

https://us.pycon.org/2019/schedule/presentation/195/

PyCon 2019

May 04, 2019
Tweet

More Decks by PyCon 2019

Other Decks in Programming

Transcript

  1. PEP 572
    THE WALRUS OPERATOR
    ~
    DUSTIN INGRAM
    PYCON US 2019
    @di_codes

    View Slide

  2. HI, I'M DUSTIN
    @di_codes

    View Slide

  3. PEP 572
    @di_codes

    View Slide

  4. PYTHON
    GOVERNANCE
    @di_codes

    View Slide

  5. BDFL
    BENEVOLENT DICTATOR
    FOR LIFE
    @di_codes

    View Slide

  6. View Slide

  7. PEP
    PYTHON ENHANCEMENT
    PROPOSAL
    @di_codes

    View Slide

  8. View Slide

  9. PEP 8
    STYLE GUIDE
    FOR PYTHON CODE
    @di_codes

    View Slide

  10. PEP 8
    STYLE GUIDE
    FOR PYTHON CODE
    AUTHOR: GUIDO VAN ROSSUM
    @di_codes

    View Slide

  11. PEP 20
    THE ZEN OF PYTHON
    @di_codes

    View Slide

  12. PEP 20
    THE ZEN OF PYTHON
    AUTHOR: TIM PETERS
    @di_codes

    View Slide

  13. PEP 566
    METADATA FOR PYTHON
    SOFTWARE PACKAGES 2.1
    @di_codes

    View Slide

  14. PEP 566
    METADATA FOR PYTHON
    SOFTWARE PACKAGES 2.1
    AUTHOR: DUSTIN INGRAM
    @di_codes

    View Slide

  15. 1) DRAFT
    2) ACCEPTANCE
    3) IMPLEMENTATION
    @di_codes

    View Slide

  16. 1) DRAFT
    2) ACCEPTANCE
    3) IMPLEMENTATION
    @di_codes

    View Slide

  17. 1) DRAFT
    2) ACCEPTANCE
    3) IMPLEMENTATION
    @di_codes

    View Slide

  18. BDFL
    DELEGATES
    @di_codes

    View Slide

  19. @di_codes

    View Slide

  20. PEP 572
    ASSIGNMENT EXPRESSIONS
    @di_codes

    View Slide

  21. :=
    @di_codes

    View Slide

  22. View Slide

  23. View Slide

  24. EXAMPLES
    @di_codes

    View Slide

  25. BALANCING
    LOC AND BIG O()
    @di_codes

    View Slide

  26. foo = [f(x), f(x)**2, f(x)**3]
    @di_codes

    View Slide

  27. y = f(x)
    foo = [y, y**2, y**3]
    @di_codes

    View Slide

  28. foo = [y := f(x), y**2, y**3]
    @di_codes

    View Slide

  29. AVOIDING
    INEFFICIENT
    COMPREHENSIONS
    @di_codes

    View Slide

  30. results = []
    for x in data:
    result = f(x)
    if result:
    results.append(result)
    @di_codes

    View Slide

  31. results = [
    f(x) for x in data
    if f(x)
    ]
    @di_codes

    View Slide

  32. results = [
    y for x in data
    if (y := f(x))
    ]
    @di_codes

    View Slide

  33. UNNECESSARY
    VARIABLES IN SCOPE
    @di_codes

    View Slide

  34. match = pattern.search(data)
    if match:
    do_something(match)
    @di_codes

    View Slide

  35. if (match := pattern.search(data)):
    do_something(match)
    @di_codes

    View Slide

  36. PROCESSING
    STREAMS IN CHUNKS
    @di_codes

    View Slide

  37. chunk = file.read(8192)
    while chunk:
    process(chunk)
    chunk = file.read(8192)
    @di_codes

    View Slide

  38. while chunk := file.read(8192):
    process(chunk)
    @di_codes

    View Slide

  39. WHY?
    @di_codes

    View Slide

  40. FEWER LINES
    ARE BETTER
    @di_codes

    View Slide

  41. y = f(x)
    foo = [y, y**2, y**3]
    @di_codes

    View Slide

  42. foo = [y := f(x), y**2, y**3]
    @di_codes

    View Slide

  43. FEWER LINES
    ARE MORE EFFICIENT?
    @di_codes

    View Slide

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

    View Slide

  45. group = re.match(data).group(1) if re.match(data) else None
    @di_codes

    View Slide

  46. group = match.group(1) if (match := re.match(data)) else None
    @di_codes

    View Slide

  47. =
    @di_codes

    View Slide

  48. x = y = z = 0 # Yes
    (z := (y := (x := 0))) # No
    @di_codes

    View Slide

  49. a[i] = x # Yes
    a[i] := x # No
    @di_codes

    View Slide

  50. self.rest = [] # Yes
    self.rest := [] # No
    @di_codes

    View Slide

  51. x = 1, 2 # Sets x to (1, 2)
    (x := 1, 2) # Sets x to 1
    @di_codes

    View Slide

  52. total += tax # Yes
    total +:= tax # No
    @di_codes

    View Slide

  53. +:=
    @di_codes

    View Slide

  54. View Slide

  55. View Slide

  56. PEP 572
    @di_codes

    View Slide

  57. RECEPTION
    @di_codes

    View Slide

  58. BACKWARDS
    COMPATIBILITY
    "WHERE WILL THIS WORK?"
    @di_codes

    View Slide

  59. TEACHABILITY
    "WHAT DO WE CALL THIS?"
    @di_codes

    View Slide

  60. ATTRACTIVENESS
    "IT'S JUST UGLY!"
    @di_codes

    View Slide

  61. View Slide

  62. View Slide

  63. View Slide

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

    View Slide

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

    View Slide

  66. ŁUKASZ LANGA:
    "DICTATORS SHOULD DICTATE"
    @di_codes

    View Slide

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

    View Slide

  68. View Slide

  69. View Slide

  70. View Slide

  71. View Slide

  72. View Slide

  73. View Slide

  74. View Slide

  75. View Slide

  76. View Slide

  77. View Slide

  78. DICTATORS
    ARE PEOPLE TOO
    @di_codes

    View Slide

  79. MAINTAINERS
    ARE PEOPLE TOO
    @di_codes

    View Slide

  80. PEOPLE
    ARE PEOPLE TOO
    @di_codes

    View Slide

  81. QUESTIONS
    @di_codes

    View Slide

  82. WHAT DOES THIS
    MEAN FOR PYTHON?
    @di_codes

    View Slide

  83. @di_codes

    View Slide

  84. @di_codes

    View Slide

  85. @di_codes

    View Slide

  86. @di_codes

    View Slide

  87. IT'S GOING
    TO BE OK
    @di_codes

    View Slide

  88. PEP 8000
    PYTHON LANGUAGE
    GOVERNANCE PROPOSAL OVERVIEW
    @di_codes

    View Slide

  89. PEP 8001
    PYTHON GOVERNANCE
    VOTING PROCESS
    @di_codes

    View Slide

  90. PEP 8002
    OPEN SOURCE
    GOVERNANCE SURVEY
    @di_codes

    View Slide

  91. ▸ PEP 8010 - The Technical Leader Governance Model
    ▸ PEP 8011 - Python Governance Model Lead by Trio of Pythonistas
    ▸ PEP 8012 - The Community Governance Model
    ▸ PEP 8013 - The External Governance Model
    ▸ PEP 8014 - The Commons Governance Model
    ▸ PEP 8015 - Organization of the Python community
    ▸ PEP 8016 - The Steering Council Model
    @di_codes

    View Slide

  92. VOTE
    DEC 1ST - 16TH, 2018
    @di_codes

    View Slide

  93. View Slide

  94. PEP 8016
    STEERING COUNCIL MODEL
    @di_codes

    View Slide

  95. VOTE
    JAN 21ST - FEB 4TH, 2019
    @di_codes

    View Slide

  96. . . .
    @di_codes

    View Slide

  97. View Slide

  98. View Slide

  99. View Slide

  100. View Slide

  101. Q&A
    @di_codes

    View Slide

  102. WILL THIS BECOME
    PART OF PYTHON?
    @di_codes

    View Slide

  103. IT ALREADY HAS
    (IN 3.8)
    @di_codes

    View Slide

  104. BUT I DON'T LIKE IT!
    @di_codes

    View Slide

  105. THEN DON'T
    WRITE IT!
    @di_codes

    View Slide

  106. IS GUIDO
    COMING BACK?
    @di_codes

    View Slide

  107. TO PYTHON?
    @di_codes

    View Slide

  108. YES!
    @di_codes

    View Slide

  109. AS BDFL?
    @di_codes

    View Slide

  110. NOPE
    @di_codes

    View Slide

  111. WILL THIS
    HAPPEN AGAIN?
    @di_codes

    View Slide

  112. WILL ANOTHER PEP
    BE THIS CONTROVERSIAL?
    @di_codes

    View Slide

  113. PROBABLY NOT
    @di_codes

    View Slide

  114. WILL PEOPLE BE
    NEGATIVE
    ON THE INTERNET?
    @di_codes

    View Slide

  115. ¯\_(ϑ)_/¯
    @di_codes

    View Slide

  116. View Slide

  117. THANKS!
    @DI_CODES

    View Slide