
This video provides an overview of the entire course.
Choosing the correct name is essential to make our programs more readable and ease the process of designing software and applications. Complex names could lead to confusion. This video will guide you to select the appropriate names while designing an application.
Many programming languages make a distinction between integers, bytes, and long integers. Some languages include distinctions for signed versus unsigned integers. How do we map these concepts to Python? This video will walk you through these concepts in detail.
Python offers us several ways to work with rational numbers and approximations of irrational numbers. We have three basic choices, which are Float, Decimal, and Fraction. With so many choices, when do we use each of these? This video will let you answer this question.
This video will let you understand which division operator to use while converting numbers from one base to another
How can we rewrite an immutable string? This video will answer this question and show you how to work with strings in Python.
The easiest way to decompose a complex string is by generalizing the string into a pattern and then writing a regular expression that describes that pattern.This video will let you know how to do it in a smart way!
Creating complex strings is, in many ways, the polar opposite of parsing a complex string. Let’s dive into building a complex string.
There’s another way of building complex strings, which is, from a list of characters. This video will walk you through the steps that let you build a complex string from a list of characters.
Our Computers work a lot with Unicode, and sometimes, we are not aware how to use them. This video will let you know how to use Unicode and the internal operations on them.
How do we map Unicode characters to bytes for writing to a file or transmitting? This video will show you, how to achieve this goal.
How can we work with files that aren't properly encoded? What do we do with files written in the ASCII encoding? How do we decode the characters from that stream of bytes? This video will answer all these queries.
How can we keep things, which are pairs, such as latitude and longitude, together? Let’s see how to do this!
You need to write Python script files in order to do anything truly useful. How can we avoid syntax errors and be sure that our code matches what's in common use? This video will provide a resolution for these tasks.
There are many times when we need to write lines of code that are so long that they're very hard to read. How can we break long Python statements into more manageable pieces? Let’s explore this.
When we have a useful script, we often need to leave notes for ourselves and others, on what it does, how it solves some particular problem, and when it should be used. This video contains a suggested outline so that the documentation will be reasonably complete.
When we have a useful script, we often need to leave notes on what it does, how it works, and when it should be used. Many tools for producing documentation, including Docutils, work with RST markup. What RST features can we use to make our documentation more readable? Let’s dive into it!
When designing a complex chain of if and else statements, we might miss some condition that got lost in the tangle of logic. Missing this will mean that our program will fail to work properly. How can we be sure we haven't missed something? This video is an answer to this question.
There are a few situations, where we don't have the data until we get an input from the person. Let’s have a look at how we could implement a while statement in these conditions.
What could you do when you have multiple break statements, each with its own condition. How can you minimize the problems created by having complex break conditions? Let’s get the answer for these questions.
How could we avoid confusion due to hierarchy if we're trying to handle detailed exceptions as well as generic exceptions? This video will give a few of the best exception matching rules.
There are some common mistakes in exception handling. These can cause programs to become unresponsive. This video will show some common exception handling errors that we can avoid.
In some cases, we may want to merge some seemingly unrelated exceptions into a single generic exception. What if we need to provide supporting details that amplify or extend the generic exception. We can do this by chaining from the generic exception to the root cause exception. Let’s see how to do this.
There are many instances where our scripts will be entangled with external resources. We'd like to isolate each entanglement so that we can be sure that the resource is acquired and released properly. Let’s see how we could achieve this goal.
When we define a function, we often have a need for optional parameters. This allows us to write functions that are more flexible, and can be used in more situations. Let’s see how to design these functions.
In some cases, we want to provide a simple, high-performance software implementation that can perform different calculations based on what's known and what's unknown. We don't want to use a general algebraic framework; we want to bundle the different solutions into a simple, efficient function. This video will demonstrate how you could do this.
What if you have a large number of positional parameters to a function? What would you do when it gets difficult to remember the required order for the parameters and there are too many parameters? Let’s answer these questions.
Sometimes we want hints about the type of data involved, which can be used for testing and confirmation but don't interfere with performance. How can we provide meaningful type hints? Let’s see how we could achieve this goal.
What could be done if we’d like to provide a way to make the common parameters slightly easier to work with than the uncommon parameters and to avoid having to repeat the parameters that are part of a larger context? Let’s have a resolution to this situation.
How can we clearly document what a function does? Can we provide examples? Let’s explore the answers to these questions.
Let’s see how we could use a simple and smart way to design recursive functions to enhance the structure of our program.
How can we import the functions or classes from a file without having the script start doing something? Let’s see how to do this.
How do we choose which structure to use? What are the features of lists, sets, and dictionaries? Why do we have tuples and frozen sets? Let’s answer these questions with this video.
Can we control the formatting in our programs? Can we change the extra characters that are supplied? Let’s see how to do this.
There are many times when we want to pick items from a list. One of the most common kinds of processing is to treat the first item of a list as a special case. This leads to a kind of head-tail processing where we treat the head of a list differently from the items in the tail of a list. Let’s see how we can slice or dice a list.
There are many times when we want to remove items from a list collection. We might delete items from a list, and then process the items that are left over. Let’s see how to do this.
We generally want to display the values with the most significant digit first. This leads to a need of reversing the sequence of digits in a list. This video will let you do this in Python.
Can we control the formatting in our programs? Can we change the extra characters that are supplied? Let’s see how to do this.
Python gives us several ways to remove items from a set collection. Let’s dive into few of these.
Through this video, you will be able to use a dictionary when you have some key that we need to map to a given value along with some key operations like inserting and updating dictionaries.
This video will show you how to define a service that works in a simulated environment with a single processing thread and avoid concurrency and multi-processing considerations.
What if we want to keep the keys in a given order so that the dictionary follows the structure of the source file? Let’s see how we could do this.
How can we be sure our doctest examples really work? Let’s get the answer to this.
How do variables really work? What happens when we assign a mutable object to two variables? Let’s have the answer to these questions.
This video will walk you through different ways to break the connection that exists when two variables are references to the same underlying object
This video will let you have a close look at the consequences of a mutable default value for a function parameter and how to avoid it.
Can we control the formatting in our programs? Can we change the extra characters that are supplied? Let’s see how to do this.
The environment variables are available through the os module. How can we have an application's configuration based on these OS-level settings? Let’s have a close look at this.
There are some kinds of formatting options available in Python. What if we want more flexible output? Let’s see some amazing options for this, which are there for you in Python.
In some cases, we may want to get the user input from the OS command line without a lot of interaction. We'd prefer to parse the command-line argument values and either perform the processing or report an error. How do we parse argument values from the command line? Let’s start doing this with this video.
There are several ways of creating interactive applications. Let’s see how we can prompt the user for input and then invoke a specific method of the class we provide.
The environment variables are available through the os module. How can we have an application's configuration based on these OS-level settings? Let’s have a close look at this.
In this video, we will take a look at Flynn's taxonomy.
Another aspect that we need to consider to evaluate a parallel architecture is memory organization. In this video you will understand this concept.
This video is the continuation of the previous video where we will take a closer look at distributed memory systems.
In this video, you will get an overview of parallel programming models.
The design of algorithms that exploit parallelism is based on a series of operations. This video shows us how to design such parallel programs.
The development of parallel programming created the need of performance metrics. This video will help us evaluate the performance of a parallel program.
Python is a powerful, dynamic, and interpreted programming language that is used in a wide variety of applications. In this video, we will get introduced to Python and its features.
In this video, we simply demonstrate how to start a single new program from inside a Python program.
This video simply shows you how to create a single thread inside a Python program.
The simplest way to use a thread is to instantiate it with a target function. This video shows us how to do that.
This video helps us in determining the thread which we created earlier.
This video will help us to implement a new thread using the threading module.
In this video, we describe the Python threading synchronization mechanism called lock().
If we want only the thread that acquires a lock to release it, we must use an RLock() object. This video will get you introduced to RLock.
A semaphore is an abstract data type managed by the operating system. In this video we will carry out the thread synchronization with semaphores.
A condition identifies a change of state in the application. In this video, we will carry out the thread synchronization with a condition.
Events are objects that are used for communication between threads. In this video, we will carry out thread synchronization with an event.
The "with" statement is useful when you have two related operations that must be executed as a pair with a block of code in-between. This video will show us how to use the "with" statement.
Queues are much easier to deal with and make threaded programming considerably safe. In this video, we will take a look at thread communication using queue.
In this video, we will verify the impact of the GIL, evaluating the performance of a multithread application.
Spawn means the creation of a process by a parent process. This video will show us how to spawn a process
The procedure to name a process is similar to that described for the threading library. Let's check this out in this video
Running a process in the background is a typical mode of execution of laborious processes. This video will show you how to do that.
It's possible to kill a process immediately using the terminate() method. Let's see how to do that in this video.
In this video, we will see how to implement a custom subclass and process.
The development of parallel applications has the need for the exchange of data between processes. We will see how to do that in this video.
Synchronization primitives are quite similar to those encountered for the library and threading. In this video, we will see how to synchronize the process.
Python multiprocessing provides a manager to coordinate shared information between all its users. In this video, we will see how to manage a state between processes.
The multiprocessing library provides the Pool class for simple parallel processing tasks. In this video, we will see how to use it.
The Python programming language provides a number of MPI modules to write parallel programs. In this video, we will see how to use the mpi4py library
One of the most important features among those provided by MPI is the point-to-point communication. We will check that out in this video.
A common problem we face is that of the deadlock in processes. This video will help us to avoid such problems.
In a collective communication broadcast process, a single process sends the same data to any other process.
The scatter functionality sends the chunks of data in an array to different processes. This video will show us how to use scatter for collective communication.
With the gather function, all processes send data to a root process that collects the data received. Let's look at using gather for collective communication.
The Alltoall collective communication combines the scatter and gathers functionalities. In this video, we will see how to use Alltoall for collective communication.
Reduction takes an array of input elements in each process and returns an array of output elements to the root process. We will take a look at this operation in this video.
MPI allows us to assign a virtual topology to a communicator. In this video, we will see how to optimize the communication using such mechanism
With the release of Python 3.2, the concurrent.future module was introduced. In this video, we will see how to use this module.
In this video, the focus is on handling events with the help of Asyncio.
In this video, we will see how to use the co-routine mechanism of Asyncio to simulate a finite state machine of five states.
The Asyncio module provides us with the asyncio. Task(coroutine) method to handle computations with tasks. In this video, we will see how to manipulate a task with Asyncio.
Another key component of the Asyncio module is the Future class. This video will teach you how to deal with Asyncio and futures.
Celery is a Python framework used to manage a distributed tasks, following the object-oriented middleware approach. In this video, we will see how to use Celery to distribute tasks.
In this video, we'll learn to create and call a task using the Celery module.
SCOOP is a Python module to distribute concurrent tasks (called Futures) on heterogeneous computational nodes. In this video we will take a look at scientific computing with Scoop.
The SCOOP Python modules define more than one map function; and they allow asynchronous computation that could be propagated to its workers. In this video, we will see how to handle Map functions with SCOOP.
Python Remote Objects (Pyro4) is a library that resembles Java's Remote Method Invocation (RMI), which allows you to invoke a method of a remote object. In this video we will see how to do that.
Implement a chain of objects with Pyro4 using Python scripts.
In this video, we will see how to build a simple client-server application with Pyro4.
PyCSP is a Python module based on communicating sequential processes, which is a programming paradigm developed to build concurrent programs via message passing. We will take a look at that in this video.
Remote Python Call (RPyC) is a Python module that is used for remote procedure calls as well as for distributed computing. In this video, we will see how to carry out a remote procedure call with RPyC.
PyCUDA is a Python wrap for Compute Unified Device Architecture (CUDA), the softwarelibrary developed by NVIDIA for GPU programming. In this video, we will see how to use PyCUDA.
The PyCUDA programming model is designed for the common execution of a program on a CPU and GPU. This video will show us how to build a PyCUDA application.
In the CUDA-capable GPU card, there are four types of memories. In this video, we will take a look at those with the help of matrix manipulation.
In this video, we will see the common use case of GPU computations in order to invoke a kernel function.
The PyCuda.elementwise.ElementwiseKernel function allows us to execute the kernel on complex expressions. We will see how to do that in this video.
PyCUDA provides a functionality to perform reduction operations on the GPU. We will take a look at that in this video.
NumbaPro is a Python compiler that provides a CUDA-based API to write CUDA programs. In this video we will demonstrate GPU programming with NumbaPro.
NumbaPro provides a Python wrap for CUDA libraries for numerical computing. We will understand it with the help of this video.
In this video, we'll examine the Python implementation of OpenCL called PyOpenCL.
As for programming with PyCUDA, the first step to build a program for PyOpenCL is the encoding of the host application. This video will show us how to build the application.
PyOpenCL provides the functionality in the pyopencl.elementwise class that allows us to evaluate the complicated expressions in a single computational pass. We will see how to do that in this video.
In this video, we will test the GPU application by implementing the regular definition schema of an application for PyOpenCL.
This video will give you brief information about the course.
In this video we will set up our development environment.
In this video, we will get started writing programs in Python using the Eclipse IDE with the PyDev plugin. This will give us a foundation for all Python projects we are developing in this video series.
In this video, we will be setting breakpoints in order to step through and debug our code. Setting breakpoints is a great way to understand the flow of our code, especially when using object-oriented programming with Inheritance.
In this video, we will be enhancing our Python debugging skills by setting breakpoints and then using different available debugging tools within Eclipse. We will explore the callstack window; look at the Variables, Breakpoint, and Expression windows; set watches; and use the Outline window as well as bookmarks to navigate the code.
In this video, we will introduce the software classic "Design Patterns". We will then create the Maze labyrinth game from the Design Patterns book in Python using OOP. We will begin by not using any patterns so that we can see and understand the value of using patterns.
In this video, we will create the "Maze" game using the abstract factory design pattern. We will first build a regular Maze and then extend this Maze to an Enchanted Maze, and also to another Maze that can have bombs in it.
In this video, we will create the "Maze" game using the Builder Design Pattern. We will explain this pattern by then creating a "Counting Maze".
In this video, we will create the "Maze" game using the Prototype Design Pattern. We will explain this pattern by creating one Maze, saving it, and then cloning it a few times. We'll then modify the clones.
In this video, we will introduce Python's built-in GUI framework, Tkinter. We will start with the fewest lines of code required to build a working GUI, and then we will change the GUI's default size and also fix its size.
In this video, we will enhance the GUI by adding several widgets. We will add a menu, add tabs and populate those tabs with LabelFrames, Labels, Comboboxes, and text entries using the Grid layout manager. We will also add spacing around the widgets to make the GUI look great.
In this video, we will extend our GUI by turning it into a Weather app. We will be using data from NOAA. First we will use previously saved data to populate our GUI, and in the end we will directly retrieve the weather data in real time from the website.
In this video, we will further enhance our Weather app GUI by using the OpenWeatherMap API. This will allow us to retrieve weather data from cities located all over the world. We will retrieve this data directly from the Web.
In this video, we will reuse some code from the previous section, in which we collected live weather data from the NOAA website. We will then save this data in HTML format.
In this video, we will use Gmail as our personal e-mailing server. First, we will setup a new Gmail account and configure required settings. Then we will e-mail our HTML weather data report using Gmail.
In this video, we will introduce Python's "schedule" module. We will explore the different scheduling options it provides, and then we will use this module to schedule our data collection, save as HTML, and e-mailing process.
In this video, we will create a Windows Service written in Python. We will see one way to correctly install the required pywin32 module that works for Python 3.5, and how to successfully run the postinstall script. We will then run our scheduled task as a Windows Service.
As a Python user, have you felt the need to use the programming features of this powerful language? You definitely would want to do more than just using Python commands and use its code to make your work easy. If this is the case, this Learning Path is for you.
It’s no NEWS that Python is the market-standard tool for data science. However, it’s worth mentioning that Python has made a huge impact in the programming world. Python is a widely used high-level, general-purpose, interpreted, dynamic programming language.
Python: Programming for Python Users is Packt’s Video Learning Path that is a series of individual video products put together in a logical and stepwise manner such that each video builds on the skills learned in the video before it.
This Learning Path first introduces the Unity engine. It shows how to use the interface and how to build levels, and culminates in the creation of a simple game. The core features and fundamentals are explored in a fun and practical way, encouraging the development of real-world projects while establishing a solid understanding of game development principles.
This Learning Path starts with the essentials of Python programming. This will touch upon all the necessary Python concepts related to data structures, OOP, functional programming, as well as statistical programming. You will get acquainted with the nuances of Python syntax and how to effectively use the advantages that it offers.
Then, you’ll be introduced to the world of parallel computing. Explore thread-based parallelism model using the Python threading module by synchronizing threads and using locks, mutex, semaphores queues, GIL, and the thread pool. Moving on, you’ll get to grips with the asynchronous parallel programming model using the Python asyncio module, and will see how to handle exceptions. You will discover distributed computing with Python, and learn how to install a broker, use Celery Python Module, and create a worker.
The course focuses on building 4 fun projects from scratch with easy-to-understand explanations and practical applications. You’ll learn how to create a well-designed architecture and increase performance of the current applications. You will learn how to build enterprise ready applications with the Python language.
The goal of this course is to make you proficient at Python programming, able to make projects from scratch.
About the Authors:
This Learning Path is authored by some of the best in the field.
Steven F. Lott has been programming since the 70s, when computers were large, expensive, and rare. As a contract software developer and architect, he has worked on hundreds of projects, from very small to very large. He's been using Python to solve business problems for over 10 years.
Giancarlo Zaccone has more than 10 years of experience in managing research projects, both in the scientific and industrial domains. He worked as a researcher at the National Research Council of Italy (CNR), where he was involved in a few parallel numerical computing and scientific visualization projects.
Burkhard A. Meier has more than 15 years of professional experience working in the software industry as a software tester and developer, specializing in software test automation development, execution, and analysis.