BRIDGE THE GAP BETWEEN NOVICE AND PROFESSIONAL
You've completed a basic Python programming tutorial or finished Al Sweigart's bestseller, Automate the Boring Stuff with Python. What's the next step toward becoming a capable, confident software developer?
Welcome to Beyond the Basic Stuff with Python. More than a mere collection of advanced syntax and masterful tips for writing clean code, you'll learn how to advance your Python programming skills by using the command line and other professional tools like code formatters, type checkers, linters, and version control. Sweigart takes you through best practices for setting up your development environment, naming variables, and improving readability, then tackles documentation, organization and performance measurement, as well as object-oriented design and the Big-O algorithm analysis commonly used in coding interviews. The skills you learn will boost your ability to program--not just in Python but in any language.
You'll learn:
- Coding style, and how to use Python's Black auto-formatting tool for cleaner code
- Common sources of bugs, and how to detect them with static analyzers
- How to structure the files in your code projects with the Cookiecutter template tool
- Functional programming techniques like lambda and higher-order functions
- How to profile the speed of your code with Python's built-in timeit and cProfile modules
- The computer science behind Big-O algorithm analysis
- How to make your comments and docstrings informative, and how often to write them
- How to create classes in object-oriented programming, and why they're used to organize code
Toward the end of the book you'll read a detailed source-code breakdown of two classic command-line games, the Tower of Hanoi (a logic puzzle) and Four-in-a-Row (a two-player tile-dropping game), and a breakdown of how their code follows the book's best practices. You'll test your skills by implementing the program yourself.
Of course, no single book can make you a professional software developer. But Beyond the Basic Stuff with Python will get you further down that path and make you a better programmer, as you learn to write readable code that's easy to debug and perfectly Pythonic.
- Title
- Beyond the Basic Stuff With Python
- Subtitle
- Best Practices for Writing Clean Code
- Publisher
- No Starch Press
- Author(s)
- Al Sweigart
- Published
- 2020-12-24
- Edition
- 1
- Format
- eBook (pdf, epub, mobi)
- Pages
- 448
- Language
- English
- ISBN-10
- 1593279663
- ISBN-13
- 9781593279660
- License
- Read online for free
- Book Homepage
- Free eBook, Errata, Code, Solutions, etc.
Acknowledgments Introduction Who Should Read This Book and Why About This Book Your Programming Journey Part 1: Getting Started Chapter 1: Dealing with Errors and Asking for Help How to Understand Python Error Messages Examining Tracebacks Searching for Error Messages Preventing Errors with Linters How to Ask for Programming Help Limit Back and Forth by Providing Your Information Upfront State Your Question in the Form of an Actual Question Ask Your Question on the Appropriate Website Summarize Your Question in the Headline Explain What You Want the Code to Do Include the Full Error Message Share Your Complete Code Make Your Code Readable with Proper Formatting Tell Your Helper What You’ve Already Tried Describe Your Setup Examples of Asking a Question Summary Chapter 2: Environment Setup and the Command Line The Filesystem Paths in Python The Home Directory The Current Working Directory Absolute vs. Relative Paths Programs and Processes The Command Line Opening a Terminal Window Running Programs from the Command Line Using Command Line Arguments Running Python Code from the Command Line with -c Running Python Programs from the Command Line Running the py.exe Program Running Commands from a Python Program Minimizing Typing with Tab Completion Viewing the Command History Working with Common Commands Environment Variables and PATH Viewing Environment Variables Working with the PATH Environment Variable Changing the Command Line’s PATH Environment Variable Permanently Adding Folders to PATH on Windows Permanently Adding Folders to PATH on macOS and Linux Running Python Programs Without the Command Line Running Python Programs on Windows Running Python Programs on macOS Running Python Programs on Ubuntu Linux Summary Part 2: Best Practices, Tools, and Techniques Chapter 3: Code Formatting with Black How to Lose Friends and Alienate Co-Workers Style Guides and PEP 8 Horizontal Spacing Use Space Characters for Indentation Spacing Within a Line Vertical Spacing A Vertical Spacing Example Vertical Spacing Best Practices Black: The Uncompromising Code Formatter Installing Black Running Black from the Command Line Disabling Black for Parts of Your Code Summary Chapter 4: Choosing Understandable Names Casing Styles PEP 8’s Naming Conventions Appropriate Name Length Too Short Names Too Long Names Make Names Searchable Avoid Jokes, Puns, and Cultural References Don’t Overwrite Built-in Names The Worst Possible Variable Names Ever Summary Chapter 5: Finding Code Smells Duplicate Code Magic Numbers Commented-Out Code and Dead Code Print Debugging Variables with Numeric Suffixes Classes That Should Just Be Functions or Modules List Comprehensions Within List Comprehensions Empty except Blocks and Poor Error Messages Code Smell Myths Myth: Functions Should Have Only One return Statement at the End Myth: Functions Should Have at Most One try Statement Myth: Flag Arguments Are Bad Myth: Global Variables Are Bad Myth: Comments Are Unnecessary Summary Chapter 6: Writing Pythonic Code The Zen of Python Learning to Love Significant Indentation Commonly Misused Syntax Use enumerate() Instead of range() Use the with Statement Instead of open() and close() Use is to Compare with None Instead of == Formatting Strings Use Raw Strings If Your String Has Many Backslashes Format Strings with F-Strings Making Shallow Copies of Lists Pythonic Ways to Use Dictionaries Use get() and setdefault() with Dictionaries Use collections.defaultdict for Default Values Use Dictionaries Instead of a switch Statement Conditional Expressions: Python’s “Ugly” Ternary Operator Working with Variable Values Chaining Assignment and Comparison Operators Checking Whether a Variable Is One of Many Values Summary Chapter 7: Programming Jargon Definitions Python the Language and Python the Interpreter Garbage Collection Literals Keywords Objects, Values, Instances, and Identities Items Mutable and Immutable Indexes, Keys, and Hashes Containers, Sequences, Mapping, and Set Types Dunder Methods and Magic Methods Modules and Packages Callables and First-Class Objects Commonly Confused Terms Statements vs. Expressions Block vs. Clause vs. Body Variable vs. Attribute Function vs. Method Iterable vs. Iterator Syntax vs. Runtime vs. Semantic Errors Parameters vs. Arguments Type Coercion vs. Type Casting Properties vs. Attributes Bytecode vs. Machine Code Script vs. Program, Scripting Language vs. Programming Language Library vs. Framework vs. SDK vs. Engine vs. API Summary Further Reading Chapter 8: Common Python Gotchas Don’t Add or Delete Items from a List While Looping Over It Don’t Copy Mutable Values Without copy.copy() and copy.deepcopy() Don’t Use Mutable Values for Default Arguments Don’t Build Strings with String Concatenation Don’t Expect sort() to Sort Alphabetically Don’t Assume Floating-Point Numbers Are Perfectly Accurate Don’t Chain Inequality != Operators Don’t Forget the Comma in Single-Item Tuples Summary Chapter 9: Esoteric Python Oddities Why 256 Is 256 but 257 Is Not 257 String Interning Python’s Fake Increment and Decrement Operators All of Nothing Boolean Values Are Integer Values Chaining Multiple Kinds of Operators Python’s Antigravity Feature Summary Chapter 10: Writing Effective Functions Function Names Function Size Trade-Offs Function Parameters and Arguments Default Arguments Using * and ** to Pass Arguments to Functions Using * to Create Variadic Functions Using ** to Create Variadic Functions Using * and ** to Create Wrapper Functions Functional Programming Side Effects Higher-Order Functions Lambda Functions Mapping and Filtering with List Comprehensions Return Values Should Always Have the Same Data Type Raising Exceptions vs. Returning Error Codes Summary Chapter 11: Comments, Docstrings, and Type Hints Comments Comment Style Inline Comments Explanatory Comments Summary Comments “Lessons Learned” Comments Legal Comments Professional Comments Codetags and TODO Comments Magic Comments and Source File Encoding Docstrings Type Hints Using Static Analyzers Setting Type Hints for Multiple Types Setting Type Hints for Lists, Dictionaries, and More Backporting Type Hints with Comments Summary Chapter 12: Organizing Your Code Projects with Git Git Commits and Repos Using Cookiecutter to Create New Python Projects Installing Git Configuring Your Git Username and Email Installing GUI Git Tools The Git Workflow How Git Keeps Track of File Status Why Stage Files? Creating a Git Repo on Your Computer Adding Files for Git to Track Ignoring Files in the Repo Committing Changes Deleting Files from the Repo Renaming and Moving Files in the Repo Viewing the Commit Log Recovering Old Changes Undoing Uncommitted Local Changes Unstaging a Staged File Rolling Back the Most Recent Commits Rolling Back to a Specific Commit for a Single File Rewriting the Commit History GitHub and the git push Command Pushing an Existing Repository to GitHub Cloning a Repo from an Existing GitHub Repo Summary Chapter 13: Measuring Performance and Big O Algorithm Analysis The timeit Module The cProfile Profiler Big O Algorithm Analysis Big O Orders A Bookshelf Metaphor for Big O Orders Big O Measures the Worst-Case Scenario Determining the Big O Order of Your Code Why Lower Orders and Coefficients Don’t Matter Big O Analysis Examples The Big O Order of Common Function Calls Analyzing Big O at a Glance Big O Doesn’t Matter When n Is Small, and n Is Usually Small Summary Chapter 14: Practice Projects The Tower of Hanoi The Output The Source Code Writing the Code Four-in-a-Row The Output The Source Code Writing the Code Summary Part 3: Object-Oriented Python Chapter 15: Object-Oriented Programming and Classes Real-World Analogy: Filling Out a Form Creating Objects from Classes Creating a Simple Class: WizCoin Methods, __init__(), and self Attributes Private Attributes and Private Methods The type() Function and __qualname__ Attribute Non-OOP vs. OOP Examples: Tic-Tac-Toe Designing Classes for the Real World Is Hard Summary Chapter 16: Object-Oriented Programming and Inheritance How Inheritance Works Overriding Methods The super() Function Favor Composition Over Inheritance Inheritance’s Downside The isinstance() and issubclass() Functions Class Methods Class Attributes Static Methods When to Use Class and Static Object-Oriented Features Object-Oriented Buzzwords Encapsulation Polymorphism When Not to Use Inheritance Multiple Inheritance Method Resolution Order Summary Chapter 17: Pythonic OOP: Properties and Dunder Methods Properties Turning an Attribute into a Property Using Setters to Validate Data Read-Only Properties When to Use Properties Python’s Dunder Methods String Representation Dunder Methods Numeric Dunder Methods Reflected Numeric Dunder Methods In-Place Augmented Assignment Dunder Methods Comparison Dunder Methods Summary Index