In this Pydon't we conclude the slicing trilogy and
take a look at the inner workings of Python slicing,
from the built-in slice type to the dunder method
__getitem__ and its siblings.
In this Pydon't we cover advanced topics related to sequence slicing, like (negative) steps, more idiomatic sequence slicing, slice assignment, and slice deletion.
In the fifth article of this short series we will be handling some subtleties that we overlooked in our experiment to classify handwritten digits from the MNIST dataset.
This article covers the basics of sequence slicing in Python and teaches you some idiomatic slicing patterns to write more elegant code.
In this article we use (finite state) automatons to count 698,438,863,898,480,640 passwords in a couple milliseconds.
A short article with all you need to know about sequence indexing in Python β and a bit more.
If you need to access the items of an iterable but also keep
track of their indices, have you considered using enumerate?
Let's talk about another of Python's amazing tools to work
with for loops.
In part 4 of this series we add some unit testing,
improve our tokenizer and implement the primitives β΄ and β€.
for loops are the bread and butter of imperative programming
and Python has some really nice tools to work with them.
If you want to traverse several structures in parallel,
have you considered using zip?
Structural pattern matching is coming in Python 3.10 and
the previous Pydon't explored some interesting use cases
for the new match statement.
This article explores situations for which match isn't the answer.
In the fourth article of this short series we will apply our neural network framework to recognise handwritten digits.
Structural pattern matching is coming in Python 3.10 and this article
explores how to use it to write Pythonic code,
showing the best use cases for the match statement.
The third article of this short series concerns itself with the implementation of the backpropagation algorithm, the usual choice of algorithm used to enable a neural network to learn.
In the second article of this short series we will create a class for a generic neural network and we will also see how to assess the quality of the output of a network, essentially preparing ourselves to implement the backpropagation algorithm.
Learn the ins and outs of comparison operator chaining, and especially the cases you should avoid.
This is the first article in a series to implement a neural network from scratch. We will set things up in terms of software to install, knowledge we need, and some code to serve as backbone for the remainder of the series.
Learn about deep unpacking, a powerful way to write assignments in your code that protects you against unexpected bugs and that you'll rely on heavily when using the structural pattern matching feature that was introduced in Python 3.10.
Recursion is a technique that you should have in your programming arsenal, but that doesn't mean you should always use recursion when writing Python code. Sometimes you should convert the recursion to another programming style or come up with a different algorithm altogether.
All Python objects can be used in expressions that should
return a boolean value, like in an if or while statement.
Python's built-in objects are usually Falsy (interpreted as False)
when they are βemptyβ or have βno valueβ and otherwise they
are Truthy (interpreted as True).
You can define this behaviour explicitly for your own
objects if you define the __bool__ dunder method.
Python's str and repr built-in methods are similar, but not the same.
Use str to print nice-looking strings for end users and use repr for debugging
purposes.
Similarly, in your classes you should implement the __str__ and __repr__
dunder methods with these two use cases in mind.