Autoplay
Autocomplete
Previous Lesson
Complete and Continue
The Complete Python Course | Learn Python by Doing in 2022
Intro to Python
Overview of the course curriculum (2:48)
Our Python coding environment (2:28)
Writing our first code! Variables and printing (4:05)
Community & Support (6:00)
Numbers in Python (3:10)
Calculating the remainder of a division (4:09)
Python strings (6:57)
Python string formatting (7:08)
Getting user input in Python (8:07)
A note about f-strings in code exercises
Booleans and comparisons in Python (4:26)
and & or in Python (8:50)
Lists in Python (8:05)
Tuples in Python (5:29)
Sets in Python (2:45)
Advanced set operations (4:51)
Python dictionaries (7:46)
Length and sum (2:47)
Joining a list (2:04)
Python fundamentals
If statements in Python (12:21)
While loops in Python (6:14)
For loops in Python (7:27)
Destructuring syntax (3:19)
Iterating over dictionaries (2:29)
Break and continue (4:11)
A couple more loop examples
The else keyword with loops (3:48)
Finding prime numbers with for loops (5:35)
List slicing in Python (4:02)
List comprehension in Python (9:02)
Comprehensions with conditionals (6:16)
Set and dictionary comprehensions (5:07)
The zip function (2:42)
Functions in Python (4:10)
Arguments and parameters (10:15)
Functions and return values in Python (9:25)
Default parameter values (7:26)
Lambda functions in Python (6:08)
First class and higher order functions (8:31)
Milestone Project 1
Code for this section
Installing Python in your computer (2:18)
Installing PyCharm in your computer (2:56)
Creating our first PyCharm project (5:45)
Setting up PyCharm font and display settings (2:43)
Milestone Project brief
Coding our application's menu in Python (13:19)
Adding new movies to our application (9:37)
Showing the user their movies (6:58)
Finding movies and retrieving their details (12:48)
Object-Oriented Programming with Python
Intro to Object-Oriented Programming with Python (17:02)
More about classes and objects (9:17)
Parameter naming in Python (3:54)
Magic methods in Python (12:57)
Inheritance in Python (8:45)
The @property decorator (4:19)
@classmethod and @staticmethod in Python (7:27)
More @classmethod and @staticmethod examples (12:06)
Errors in Python
Code samples for this section
Intro to errors in Python (13:13)
Built in errors in Python (17:58)
Raising errors in Python (10:58)
Creating our own errors in Python (13:42)
Dealing with Python errors (9:00)
The on success block and re-raising exceptions (11:21)
Handling those pesky user errors! (14:55)
Debugging with Pycharm (16:37)
Further reading
Files in Python
Code for this section
Files in Python (10:55)
Python Exercise: copying files (20:38)
CSV files with Python (9:35)
How to use the csv module to read and write CSV files more easily
JSON files with Python (17:33)
Using the with syntax in Python (5:01)
Importing our own files (10:28)
Python relative imports: children (15:18)
Python relative imports: parents (5:44)
Import errors and running as a Python script (5:26)
Further reading
Databases in Python & Milestone Project 2
Code for this section
Intro to Milestone Project 2 (5:53)
Milestone Project 2 Brief
Milestone Project with lists (17:52)
Storing books in files (19:30)
Using JSON instead of CSV (9:58)
Intro to databases with Python (7:03)
Using SQLite in Python (2:37)
Some database jargon (4:08)
Creating our books table using Python (5:49)
Inserting books using Python (6:19)
SELECT examples (3:12)
Getting all our books (6:30)
UPDATE and DELETE (2:14)
Filtering with WHERE (4:59)
Finishing the Milestone Project (7:46)
Ordering and limiting (2:37)
Developing our context manager in Python (10:11)
Errors in context managers (6:55)
Further reading
Type hinting in Python
Further reading (1:44)
Typing in Python (12:10)
Advanced built-in functions in Python
Generators in Python (12:39)
Python generator classes and iterators (8:15)
The filter() function in Python (8:43)
Iterables in Python (7:48)
The map() function in Python (5:39)
any() and all() in Python (4:59)
The enumerate() function (4:19)
So what other things evaluate to True or False?
Further reading
Advanced Python Development
Mutability in Python (11:49)
Argument mutability in Python (12:16)
Default values for parameters (5:03)
Mutable default arguments (bad idea) (6:38)
Argument unpacking in Python (11:16)
Queues in Python (3:20)
Some interesting Python collections (25:55)
Timezones (8:46)
Dates and time in Python (12:46)
Timing your code with Python (12:32)
Regular expressions (8:28)
Regex examples (13:36)
Regex in Python (13:07)
Introduction to logging in Python (10:35)
Logging to a file and other features (4:16)
The built-in itertools module
Further reading
Web Scraping with Python
Code for this session
Understanding HTML with BeautifulSoup (18:44)
More complex HTML parsing (22:18)
Structuring our parsing program better (5:40)
Splitting HTML locators out of our Python class (4:03)
Understanding HTML with the browser (6:35)
Scraping our first website with Python (6:42)
Milestone Project 3: A Quote Scraper (4:13)
Quotes Project 2: Structuring a scraping app in Python (2:41)
Quotes Project 3: Getting our locators (5:09)
Quotes Project 4: Crafting our quote parser (4:51)
Quotes Project 5: The quotes page (4:30)
Quotes Project 6: Recap of the project (3:54)
Milestone Project 4: A Book Scraper + application (5:01)
Books Project 2: Recap of HTML locators (4:53)
Books Project 3: Creating locators in Python (4:26)
Books Project 4: Creating our page (3:27)
Books Project 5: Creating our book parser (11:01)
Books Project 6: Writing our app file (3:55)
Books Project 7: Sorting the books (8:50)
Books Project 8: Constructing our menu (6:02)
ASIDE: The best way to write user menus (1:28)
Books Project 9: Getting multiple pages (2:37)
Books Project 10: Multiple pages in Python (5:26)
Books Project 11: Getting the page count in Python (6:33)
Books Project 12: Adding logging to our Python project (20:28)
A word on scraping pages with JavaScript (3:14)
A note on scraping and robots.txt
Browser automation with Selenium
Introduction to this section (1:38)
Code for this section
Review of our quotes scraping code (5:01)
Downloading chromedriver (2:00)
Using Chrome in our scraping code (6:26)
Our new page locators (3:44)
Interacting with dropdowns (4:07)
Selecting tags (5:17)
Searching for quotes (2:17)
Encapsulating logic more simply (5:03)
Adding some error handling (1:39)
Implicit and explicit waits in Selenium (6:49)
Adding waits to our program code (7:04)
Asynchronous Python Development
Code samples for this section
A glossary of terms used in concurrency
The Dining Philosophers Problem (7:38)
Processes and threads (9:24)
The Python GIL (10:30)
Example: threads in Python (12:40)
Using Python concurrent.futures: the ThreadPoolExecutor (3:08)
Don't kill threads! (1:48)
Multiprocessing in Python (7:24)
Using Python concurrent.futures: the ProcessPoolExecutor (2:15)
Dealing with shared state in threads (8:31)
Queuing in threads with shared state (12:25)
Using Python generators instead of threads (4:50)
Our first single-threaded task scheduler in Python (6:04)
Yielding from another iterator in Python (5:36)
Receiving data through yield (9:34)
The async and await keywords (6:10)
Watch these talks for more explanations and examples! (1:52)
Our asynchronous scraper (4:42)
Making our first async request in Python (14:49)
Getting multiple pages efficiently (10:23)
Using async_timeout for security (1:46)
Turning our book scraping project async (10:16)
A note on HTTPS with Python and Mac OS X (3:12)
Python on the console and managing project dependencies
Running Python in the console (8:49)
Terminal video: running Python (5:50)
Terminal video: what is a virtualenv? (10:43)
Terminal video: navigating the terminal and using virtualenv (9:49)
Terminal video: using Pipenv (9:38)
Terminal video: Pipenv and virtualenv (4:05)
Summary e-book of using Pipenv
Web development with Flask
Setting up our project with Pipenv (5:42)
Code samples for this section
Our first Flask endpoint (7:37)
Returning information with Flask and Python (4:55)
Rendering HTML with Flask and Python (6:24)
Error pages and Jinja2 inheritance (11:39)
Rendering forms with Flask and Python (14:21)
Accessing POST form data with Flask (4:48)
Putting our form in a single endpoint (3:02)
Using Jinja2 for loops to create a nicer homepage (7:57)
Adding navigation to our website (4:54)
Interacting with APIs with Python
Code for this section
Signing up to OpenExchangeRates (1:41)
Getting all exchange rates from the API (5:30)
Creating a currency exchange library (7:25)
Caching functions with functools (4:49)
TTL caches with cachetools (2:04)
Decorators in Python
A simple decorator in Python (6:07)
Using a @syntax (3:23)
Functools wraps in Python (1:55)
Decorating functions with parameters (4:56)
Decorators with parameters (9:50)
Functions that accept multiple arguments (5:29)
Generic decorators for any function (3:54)
Multiple decorators for one function?
Advanced Object-Oriented Programming
Intro to multiple inheritance with Python (13:23)
Intro to ABCs in Python (8:06)
The usefulness of ABCs (3:20)
The relationship between ABCs and interfaces (6:49)
The property setter in Python (11:08)
Pythonic vs. Non-Pythonic
GUI Development with Tkinter
Code for this section
Setting up Tkinter (2:47)
Hello world in Tkinter (7:37)
Labels and fields (5:22)
Packing components (11:57)
Using frames for different layouts (3:41)
Starting our text editor project (0:56)
Tkinter notebooks and creating files (3:32)
Adding a menu to our application (4:11)
Saving files to disk (7:59)
Opening files (4:19)
Binding shortcuts in Tkinter (4:42)
Checking our tabs for unsaved changes (8:17)
Confirming exit with unsaved changes (4:24)
Closing individual tabs (5:21)
Adding another menu (1:55)
Adding a permanent scrollbar to our text area (4:22)
Unit testing with Python
Introduction to this section (2:53)
Code for this section
Testing functions (7:26)
Testing for errors (2:37)
Testing our multiplication function (9:08)
Writing a printer class for testing (1:59)
Testing classes (4:44)
More Printer tests (9:26)
Testing external libraries (9:53)
Conclusion of this section (0:58)
Algorithms and Data Structures
Presentation: queues, stacks, and complexity (9:40)
A conference talk about Big-O
Presentation: binary search (6:47)
Presentation: binary trees (5:53)
Presentation: traversal of binary trees (7:12)
Presentation: adding elements to a binary tree (7:00)
Adding elements to a binary tree in Python (10:58)
Recursion and inorder traversal in Python (14:35)
Finding nodes in a tree with Python (3:21)
How do you delete nodes from a binary tree? (9:29)
Deleting nodes in code with Python (14:10)
Deleting nodes with two children in code (18:44)
Testing our binary tree! (2:37)
Python libraries
Python libraries overview (16:35)
Using pylint (12:40)
Using yapf (7:42)
Sending e-mails with smtplib (7:35)
Sending e-mails with Mailgun (9:53)
Creating a re-usable Mailgun library (7:11)
Sneak peek: my IDE setup! (9:30)
Python Reference / Refresher
Introduction to this section (1:01)
Variables in Python (8:26)
String formatting in Python (6:26)
Getting user input (5:16)
Lists, tuples, and sets (6:31)
Advanced set operations (4:39)
Booleans in Python (4:59)
If statements in Python (8:17)
The in keyword (2:02)
If statements with the 'in' keyword (8:18)
Loops in Python (11:07)
List comprehensions (7:24)
Dictionaries (8:31)
Destructuring variables (8:28)
Functions in Python (10:41)
Function arguments and parameters (7:40)
Default parameter values (3:54)
Functions returning values (7:19)
Lambda functions in Python (7:52)
Dictionary comprehensions (4:01)
Unpacking arguments (10:24)
Unpacking keyword arguments (8:44)
Object-Oriented Programming in Python (15:52)
Magic methods: __str__ and __repr__ (6:25)
Class methods and static methods (14:03)
Class inheritance (8:32)
Class composition (6:08)
Type hinting (5:08)
How imports work in Python (9:33)
Relative imports in Python (8:52)
Errors in Python (12:47)
Custom error classes (5:04)
First-class functions (7:52)
Simple decorators in Python (7:12)
The 'at' syntax for decorators (3:32)
Decorating functions with parameters (2:24)
Decorators with parameters (4:50)
Mutability in Python (6:03)
Mutable default parameters (and why they're a bad idea) (4:27)
Confirming exit with unsaved changes
Lesson content locked
If you're already enrolled,
you'll need to login
.
Enroll in Course to Unlock