Python is created by Guido van Rossum in 1991 and developed by Python Software Foundation. It was primarily enhanced for emphasis on code readability, and its syntax allows programmers to express concepts in fewer lines of code.
So, nowadays, Python can be programmed in many applications such as:
- Web development: Web framework Django, Flask.
- Machine Learning
- Data Analysis
- Scripting
- Game development
- Embedded applications
- Desktop applications
Therefore, Utilizing Python will always cope with many common problems, and some tricks. In this article, we will discuss about some problems that we need to know.
Table of contents
- Merge two tuples into dictionary
- Check list is null
- Swap values of two variables
- Get input from command line
- Working with modules
- Wrapping up
Merge two tuples into dictionary
We can use the following way:
keys = ('name', 'age', 'food')
values = ('Bill Gate', '60', 'Hamburger')
map = dict(zip(keys, values))
or
t = ((1, 'a'), (2, 'b'))
map = dict((y, x) for x, y in t)
# OR
map = dict(map(reversed, t))
Check list is null
if not a:
print('List is empty.\n')
# OR
if len(a) == 0:
print('List is empty.\n')
# OR
if a == []:
print('List is empty.\n')
Swap values of two variables
a, b = b, a
Get input from command line
name = raw_input('What is your name?')
number = int(raw_input('Number of children: '))
The variable that recieve data from raw_input()
method has string data type. So, we need to convert it to use it.
Loops in Python
-
for
loopfor x in range(0, 3): print("The value of x is: " + x) # OR for x in range(1, 10): for y in range(1, 10): print('%d * %d = ' %(x, y, x * y))
-
while
loopx = 1 while True: if x > 10: break x += 1
-
Loop with indexes
presidents = ["Washington", "Adams", "Jefferson", "Madison", "Monroe", "Jackson"] for i in range(len(presidents)): print("President {}: {}".format(i + 1, presidents[i])) # OR using enumerate for num, name in enumerate(presidents, start = 1): print("President {}: {}".format(num, name))
The
enumerate
function creates an iterable where each element is a tuple that contains the index of the item and the original item value. Thestart = 1
option toenumerate
is optional. By default, it will start counting at0
.This function will solve the task of:
- Accessing each item in a list (or another iterable).
- Getting the index of each item accessed.
-
Loop over multiple lists at the same time –> Use zip
colors = ["red", "green", "blue", "purple"] ratios = [0.2, 0.3, 0.1, 0.4] for color, ratio in zip(colors, ratios): print("{}% {}".format(ratio * 100, color))
Note about range
and xrange
:
- In Python 2.x, we can use both
range
andxrange
. But in Python 3, we only userange
. - In Python 2.x,
range()
returns a list of numbers –> So,range
return alist
object. To Python 3,range
returns a range object. xrange()
returns the generator object that can be used to display numbers only by looping. Only particular range is displayed on demand and hence calledlazy evaluation
–> So,xrange
returnsxrange
object.xrange
use less memory, and should the for loop exit early, there’s no need to waste time creating the unused numbers. This effect is tiny in smaller lists, but increases rapidly in larger lists.
–> range
is faster if iterating over the same sequence multiple times.
–> xrange
has to reconstruct the integer object every time, but range
will have real integer objects.
Convert dynamic Python object to JSON
json.dumps(data, default = lambda o: o.__dict__)
Reversing string
str = 'abc'
str = str[::-1]
Get common element in two sets
s1= {4, 5, 7, 6}
s2 = {1, 2, 4, 5, 6}
s_common = s1.intersection(s2)
Get the differences between two sets
s1= {4, 5, 7, 6}
s2 = {1, 2, 4, 5, 6}
s_differ = s1.difference(s2)
Get distinct combined set of two sets
s1= {4, 5, 7, 6}
s2 = {1, 2, 4, 5, 6}
s_union = s1.union(s2)
Pass unknown arguments
def func(*args):
return first_arg
func(first_arg)
func(first_arg, second_arg)
func(first_arg, second_arg, third_arg)
Working with modules
All information in this section is referred from this link.
# Suppose this is foo.py.
print("before import")
import math
print("before functionA")
def functionA():
print("Function A")
print("before functionB")
def functionB():
print("Function B {}".format(math.sqrt(100)))
print("before __name__ guard")
if __name__ == '__main__':
functionA()
functionB()
print("after __name__ guard")
Whenever the Python interpreter reads a source file, it does two things:
- It sets a few special variables like
__name__
, and then - It executes all of the code found in this file.
-
When your module is the main program
If you are running your module (the source file) as the main program, e.g.
python foo.py
The interpreter will assign the hard-coded string
"__main__"
to the__name__
variable, i.e.# It's as if the interpreter inserts this at the top # of your module when run as the main program. __name__ = "__main__"
-
When your module is imported by another
On the other hand, suppose some other modules is the main program and it imports your module. This means there’s a statement like this in the main program, or in some other module the main program imports:
# Suppose this is in some other main program. import foo
In this case, the interpreter will look at the filename of your module, foo.py, strip off the .py, and assign that string to your module’s
__name__
variable, i.e.# It's as if the interpreter inserts this at the top # of your module when it's imported from another module. __name__ = "foo"
-
Executing the module’s code
After the special variables are set up, the interpreter executes all the code in the module, one statement at a time. You may want to open another window on the side with the code sample so you can follow along with this explanation.
-
Always
- In prints the string
before import
(without quotes). -
It loads the
math
module and assigns it to a variable calledmath
. This is equivalent to replacingimport math
with the following (note that__import
is a low level function in Python that takes a string and triggers the actual import).# Find and load a module given its string name, "math", # then assign it to a local variable called math. math = __import__("math")
- It prints the string
before functionA
. - It executes the
def
block, creating a function object, then assigning that function object to a variable calledfunctionA
. - It prints the string
before functionB
. - It executes the
def
block, creating another function object, then assigning that function object to a variable calledfunctionB
. - It prints the string
before __name__ guard
.
- In prints the string
-
Only when your module is the main program
- If your module is the main program, then it will see that
__name__
was indeed set to__main__
and it calls the two functions, printing the strings “Function A” and “Function B 10.0”.
- If your module is the main program, then it will see that
-
Only when your module is imported by another
- If your module is not the main program but was imported by another one, then
__name__
will be “foo”, not__main__
, and it’ll skip the body of the if statement.
- If your module is not the main program but was imported by another one, then
-
Always
- It will print the string
after __name__ guard
in both situations.
- It will print the string
-
Wrapping up
Refer:
https://snakify.org/en/lessons/for_loop_range/
https://treyhunner.com/2016/04/how-to-loop-with-indexes-in-python/