A brief history of PythonCode style – What is Pythonic code?Whitespace instead of bracesFormatting strings – printf, str.format, or f-strings?Simple formattingNamed variablesArbitrary expressionsPEP 20, the Zen of PythonBeautiful is better than uglyExplicit is better than implicitSimple is better than complexFlat is better than nestedSparse is better than denseReadability countsPracticality beats purityErrors should never pass silentlyIn the face of ambiguity, refuse the temptation to guessOne obvious way to do itHard to explain, easy to explainNamespaces are one honking great ideaExplaining PEP 8Duck typingDifferences between value and identity comparisonsLoopsMaximum line lengthVerifying code quality, pep8, pyflakes, and moreRecent additions to the Python syntaxPEP 572: Assignment expressions/the walrus operatorPEP 634: Structural pattern matching, the switch statementCommon pitfallsScope matters!Global variablesMutable function default argumentsClass propertiesOverwriting and/or creating extra built-insModifying while iteratingCatching and storing exceptionsLate binding and closuresCircular importsImport collisionsSummary