Bring Your Logic using Python
341 subscribers
109 photos
1 video
4 files
544 links
Logic building using Python : Materials, links, e-books and Code snippets
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
None is evaluated as False so you can write

>>> results = None
>>> print(results or "No results")
============24th April 2020=======
# "is" vs "=="

>>> a = [1, 2, 3]
>>> b = a

>>> a is b

True
>>> a == b
True

>>> c = list(a)

>>> a == c

True
>>> a is c
False

# • "is" expressions evaluate to True if two
# variables point to the same object

# • "==" evaluates to True if the objects
# referred to by the variables are equal
———First class Functions—————
# Functions are first-class citizens in Python:

# They can be passed as arguments to other functions,
# returned as values from other functions, and
# assigned to variables and stored in data structures.

>>> def myfunc(a, b):
... return a + b
...
>>> funcs = [myfunc]
>>> funcs[0]

<function myfunc at 0x107012230>

>>> funcs[0](2, 3)
5
No switch case in Python. However, we can emulate it with the help of first class function feature of Python.
# Because Python has first-class functions they can
# be used to emulate switch/case statements

def dispatch_if(operator, x, y):
if operator == 'add':
return x + y
elif operator == 'sub':
return x - y
elif operator == 'mul':
return x * y
elif operator == 'div':
return x / y
else:
return None


def dispatch_dict(operator, x, y):
return {
'add': lambda: x + y,
'sub': lambda: x - y,
'mul': lambda: x * y,
'div': lambda: x / y,
}.get(operator, lambda: None)()


>>> dispatch_if('mul', 2, 8)

16

>>> dispatch_dict('mul', 2, 8)
16

>>> dispatch_if('unknown', 2, 8)
None

>>> dispatch_dict('unknown', 2, 8)
None
——————List Operations—————
# Python's list slice syntax can be used without indices
# for a few fun and useful things:

# You can clear all elements from a list:
>>> lst = [1, 2, 3, 4, 5]
>>> del lst[:]
>>> lst

[]

# You can replace all elements of a list
# without creating a new list object:
>>> a = lst
>>> lst[:] = [7, 8, 9]
>>> lst

[7, 8, 9]
>>> a
[7, 8, 9]
>>> a is lst
True

# You can also create a (shallow) copy of a list:
>>> b = lst[:]
>>> b

[7, 8, 9]
>>> b is lst
False
# Python's list comprehensions are awesome.

vals = [expression
for value in collection
if condition]


# This is equivalent to:

vals = []
for value in collection:
if condition:
vals.append(expression)

# Example:

>>> even_squares = [x * x for x in range(10) if not x % 2]
>>> even_squares

[0, 4, 16, 36, 64]
———Sorting is easy in Python———
This media is not supported in your browser
VIEW IN TELEGRAM
# Python has a HTTP server built into the
# standard library. This is super handy for
# previewing websites.

# Python 3.x
$ python3 -m http.server

# Python 2.x
$ python -m SimpleHTTPServer 8000

# (This will serve the current directory at
# http://localhost:8000)
# Python 3.5+ supports 'type
# annotations' that can be
# used with tools like Mypy
# to write statically typed Python:

def my_add(a: int, b: int) -> int:
return a + b
# itertools.permutations() generates
# permutations for an iterable.
# Time to brute-force those passwords

>>> import itertools
>>> for p in itertools.permutations('ABCD'):
... print(p)


('A', 'B', 'C', 'D')
('A', 'B', 'D', 'C')
('A', 'C', 'B', 'D')
('A', 'C', 'D', 'B')
('A', 'D', 'B', 'C')
('A', 'D', 'C', 'B')
('B', 'A', 'C', 'D')
('B', 'A', 'D', 'C')
('B', 'C', 'A', 'D')
('B', 'C', 'D', 'A')
('B', 'D', 'A', 'C')
('B', 'D', 'C', 'A')
('C', 'A', 'B', 'D')
('C', 'A', 'D', 'B')
('C', 'B', 'A', 'D')
('C', 'B', 'D', 'A')
('C', 'D', 'A', 'B')
('C', 'D', 'B', 'A')
('D', 'A', 'B', 'C')
('D', 'A', 'C', 'B')
('D', 'B', 'A', 'C')
('D', 'B', 'C', 'A')
('D', 'C', 'A', 'B')
('D', 'C', 'B', 'A')
# When To Use repr vs str?
# Emulate what the std lib does:
>>> import datetime
>>> today = datetime.date.today()

# Result of str should be readable:
>>> str(today)
'2020-04-27’


# Result of repr should be unambiguous:
>>> repr(today)
'datetime.date(2020,4,27)’


# Python interpreter sessions use
# repr to inspect objects:
>>> today
datetime.date(2020,4,27)
# You can use Python's built-in "dis"
# module to disassemble functions and
# inspect their CPython VM bytecode:

>>> def greet(name):
... return 'Hello, ' + name + '!'

>>> greet('Dan')
'Hello, Dan!'

>>> import dis
>>> dis.dis(greet)
2 0 LOAD_CONST 1 ('Hello, ')
2 LOAD_FAST 0 (name)
4 BINARY_ADD
6 LOAD_CONST 2 ('!')
8 BINARY_ADD
10 RETURN_VALUE