Why Python 2?
One of the main reasons to continue with Python 2 is if you are interested in working with a large codebase written in Python 2. Moving a large application written in an earlier version of a language or rewriting it in another language completely, it can be a huge task. Another reason to stay in the Python 2 country is if your code is based on a specific extension originally written for Python 2 that has not been updated. Most of them were, but not all. It is up to you to decide if it is worth continuing to work with older extensions (also called “packages”).
Why Python 3?
The answer I give to most people is why Python 2 has been canceled. People who work directly in Python have decided that there will never be a Python 2.8. They also decided that Python 2.7 will now only receive security updates from the Python 3 development branch. There are no new features unless someone wants to spend the additional time needed to support them. Fortunately, several people are willing to do this.
Key Differences Between Python 2 and Python 3
Here are some important differences between Python 2 and Python 3 that can make the new language version less confusing for new programmers to learn:
- Python 2, the “print” function is treated as a statement instead of a function. It is not necessary to enclose the text you want to print in parentheses, although you can do so if you wish. This can be confusing because most other actions in Python use functions that require arguments to be included in parentheses. You can also generate unexpected results if you surround the parentheses around a list of comma-separated items that you want to print.
- On the other hand, Python 3 explicitly treats “print” as a function, which means that you must pass the elements that you need to print to the function in parentheses in the standard way, otherwise you will get a syntax error.
- Some Python 2 programmers find this change annoying, but it can help avoid errors. Division of integers: Python 2 treats numbers entered without digits after the decimal point as integers, which can lead to unexpected results during division.
- For example, if you write the expression 3/2 in the Python 2 code, the result of the evaluation will be 1, not 1.5, as expected. This is because Python 2 assumes that you want the result of your division to be an integer, so round the calculation to the nearest integer. To get the 1.5 results, you would have to write 3.0 / 2.0 to tell Python that you want it to return afloat, that is, to include digits after the decimal point in the result. Python 3 evaluates 3/2 to 1.5 by default, which is more intuitive for new programmers
- List of understanding loop variables: in earlier versions of Python, assigning the iterated variable in an understanding list The same name that a global variable can lead to changing the value of the global variable, something you generally don’t want. This annoying error has been fixed in Python 3, so you can use a variable name that you already used for the control variable to understand your list without worrying about leaks and variable values in the rest of your code.
- Unicode Strings: Python 3 stores strings as Unicode by default, while Python 2 requires that you mark a string with a “u” if you want to store it as Unicode. Unicode strings are more versatile than standard Python 2 ASCII strings since they can store letters in foreign languages, as well as emoji and standard Roman letters and numbers. You can still tag your Unicode strings with a “u” if you want to make sure your Python 3 code is compatible with Python 2.
- Throw exceptions: Python 3 requires a different syntax to generate exceptions. If you want to send an error message to the user, use the syntax: increase IOError (“your error message”)