SlideShare une entreprise Scribd logo
1  sur  42
Python Advance
Deepak Chandella
Email: deepchandila07@gmail.com
Agenda
 Comprehensions
 Lambda with (map, filter and reduce)
 Context managers
 Iterator, Generators, Decorators
 Python GIL and multiprocessing and multithreading
 Python WSGI
 Python Unittests
Comprehensions
Comprehensions in Python provide us with a short and concise way to construct new
sequences (such as lists, set, dictionary etc.) using sequences which have been already
defined. Python supports the following 4 types of comprehensions.
 List Comprehensions
 Dictionary Comprehensions
 Set Comprehensions
 Generator Comprehensions
List Comprehensions
 For example, if we want to create an output list which contains only the even
numbers which are present in the input list.
input_list = [1, 2, 3, 4, 4, 5, 6, 7, 7]
list_comp = [var for var in input_list if var % 2 == 0]
print("Output List:", list_comp)
Note: that list comprehension may or may not contain an if condition. List
comprehensions can contain multiple for (nested list comprehensions).
Dictionary Comprehensions
 For example, if we want to create an output dictionary which contains only the odd
numbers that are present in the input list as keys and their cubes as values.
input_list = [1,2,3,4,5,6,7]
dict_comp = {var:var ** 3 for var in input_list if var % 2 != 0}
print("Output Dictionary:", dict_comp)
Set Comprehensions
 Set comprehensions are pretty similar to list comprehensions.The only difference
between them is that set comprehensions use curly brackets { }.
 For example, if we want to create an output set which contains only the even
numbers that are present in the input list.
input_list = [1, 2, 3, 4, 4, 5, 6, 6, 6, 7, 7]
set_comp = {var for var in input_list if var % 2 == 0}
print("Output Set:", set_comp)
Generator Comprehensions
 Generator Comprehensions are very similar to list comprehensions. One difference
between them is that generator comprehensions use circular brackets whereas list
comprehensions use square brackets.
 The major difference between them is that generators don’t allocate memory for the
whole list. Instead, they generate each value one by one which is why they are memory
efficient.
input_list = [1, 2, 3, 4, 4, 5, 6, 7, 7]
output_gen = (var for var in input_list if var % 2 == 0)
print("generator object :", output_gen)
for var in output_gen:
print(var, end = ' ')
Lambda
In Python, Lambda functions are anonymous functions which means function
without a name. Lambda definition does not include a “return” statement, it always
contains an expression which is returned.
cube = lambda x: x*x*x
print(cube(3))
Note: Lambda functions can be used along with built-in functions like filter(), map()
and reduce().
Use of lambda with filter
 The filter() function in Python takes in a function and a list as arguments.This
offers an elegant way to filter out all the elements of a sequence “sequence”, for
which the function returnsTrue.
li = [5, 7, 22, 97, 54, 62, 77, 23, 73, 61]
final_list = list(filter(lambda x: (x%2 != 0) , li))
print(final_list)
Use of lambda with map
 The map() function in Python takes in a function and a list as argument.The
function is called with a lambda function and a list and a new list is returned which
contains all the lambda modified items returned by that function for each item.
li = [5, 7, 22, 97, 54, 62, 77, 23, 73, 61]
final_list = list(map(lambda x: x*2 , li))
print(final_list)
Use of lambda with reduce
 The reduce() function in Python takes in a function and a list as argument.
The function is called with a lambda function and a list and a new reduced result is
returned.This performs a repetitive operation over the pairs of the list.This is a part
of functools module.
from functools import reduce
li = [5, 8, 10, 20, 50, 100]
sum = reduce((lambda x, y: x + y), li)
print (sum)
Context Manager
 Managing Resources
In any programming language, the usage of resources like file operations or database
connections is very common. But these resources are limited in supply. Therefore, the
main problem lies in making sure to release these resources after usage. If they are not
released then it will lead to resource leakage and may cause the system to either slow
down or crash. It would be very helpful if user have a mechanism for the automatic
setup and teardown of resources.
In Python, it can be achieved by the usage of context managers which facilitate the
proper handling of resources.
Error scenario for resources
Let’s take the example of file management. When a file is opened, a file descriptor is consumed which
is a limited resource. Only a certain number of files can be opened by a process at a time.
file_descriptors = []
for x in range(100000):
file_descriptors.append(open('test.txt', 'w'))
Output:
Traceback (most recent call last):
File "context.py", line 3, in OSError: [Errno 24] Too many open files:
'test.txt‘
An error message saying that too many files are open. The above example is a case of file descriptor
leakage. It happens because there are too many open files and they are not closed.
Managing Resources using Context Manager
Python provides an easy way to manage resources i.e Context Managers.
The ”with”keyword is used. When it gets evaluated it should result in an object that
performs context management.
with open("test.txt") as f:
data = f.read()
Creating a Context Manager
When creating context managers using classes, user need to ensure that the class has the
methods: __enter__() and __exit__(). The __enter__() returns the resource
that needs to be managed and the __exit__() does not return anything but performs
the cleanup operations.
class FileManager():
def __init__(self, filename, mode):
self.filename = filename
self.mode = mode
self.file = None
def __enter__(self):
self.file = open(self.filename, self.mode)
return self.file
def __exit__(self, exc_type, exc_value, exc_traceback):
self.file.close()
Loading a file with context manager
loading a file with context manager created in previous slide
with FileManager('test.txt', 'w') as f:
f.write('Test')
print(f.closed)
Iterator
 An iterator is an object that contains a countable number of values.
 An iterator is an object that can be iterated upon, meaning that you can traverse
through all the values.
 Technically, in Python, an iterator is an object which implements the iterator
protocol, which consist of the methods __iter__() and __next__()
Iterator vs Iterable
 Lists, tuples, dictionaries, and sets are all iterable objects. They are
iterable containers which you can get an iterator from.
 All these objects have a iter() method which is used to get an iterator:
For example:
mytuple = ("apple", "banana", "cherry")
myit = iter(mytuple)
print(next(myit))
print(next(myit))
print(next(myit))
Creating a Iterator
 To create an object/class as an iterator you have to implement the
methods __iter__() and __next__() to your object.
 The __iter__() method acts similar, you can do operations (initializing etc.),
but must always return the iterator object itself.
 The __next__() method also allows you to do operations, and must return
the next item in the sequence.
 To prevent the iteration to go on forever, we can use
the StopIteration statement.
Creating a Iterator
Below is a simple Python program that creates iterator type that iterates from 10 to given
limit. For example, if limit is 15, then it prints 10 11 12 13 14 15. And if limit is 5, then it
prints nothing.
class Test:
def __init__(self, limit):
self.limit = limit
def __iter__(self):
self.x = 10
return self
def next(self):
x = self.x
if x > self.limit:
raise StopIteration
self.x = x + 1;
return x
Creating a Iterator
Using iterators created in previous slide…
 Prints numbers from 10 to 15
for i in Test(15):
print(i)
 Prints nothing
for i in Test(5):
print(i)
Generator
 There is a lot of overhead in building an iterator. We have to implement a class
with __iter__() and __next__() method, keep track of internal states,
raise StopIteration when there was no values to be returned etc.
 This is both lengthy and counter intuitive. Generator comes into rescue in such
situations.
 Python generators are a simple way of creating iterators. All the overhead we
mentioned above are automatically handled by generators in Python.
 Simply speaking, a generator is a function that returns an object (iterator) which we
can iterate over (one value at a time).
Creating a Generator
 It is fairly simple to create a generator in Python. It is as easy as defining a normal
function with yield statement instead of a return statement.
 If a function contains at least one yield statement (it may contain
other yield or return statements), it becomes a generator function.
Both yield and return will return some value from a function.
 The difference is that, while a return statement terminates a function entirely, yield
statement pauses the function saving all its states and later continues from there on
successive calls.
Generator example
 For example:
def my_gen():
n = 1
print('This is printed first')
yield n
n += 1
print('This is printed second')
yield n
n += 1
print('This is printed at last')
yield n
Generator example
 Try previous example on interpreter by calling one by one.
 Or try it with for loop e.g.
for item in my_gen():
print(item)
Generator example2
 Generator example that reverse a string
def rev_str(my_str):
length = len(my_str)
for i in range(length - 1,-1,-1):
yield my_str[i]
for char in rev_str("hello"):
print(char)
When to use yield instead of return
 Generator Return sends a specified value back to its caller whereas Yield can
produce a sequence of values. We should use yield when we want to iterate over a
sequence, but don’t want to store the entire sequence in memory.
Decorator
 Decorators are very powerful and useful tool in Python since it allows
programmers to modify the behavior of function or class.
 Decorators allow us to wrap another function in order to extend the behavior of
wrapped function, without permanently modifying it.
 In Decorators, functions are taken as the argument into another function and then
called inside the wrapper function.
 Python allows you to use decorators in a simpler way with the @ symbol,
sometimes called the “pie” syntax.
Decorator example
 For example
def my_decorator(func):
def wrapper():
print("Something is happening before the function is
called.")
func()
print("Something is happening after the function is
called.")
return wrapper
@my_decorator
def say_hello():
print(“Hellloooo!”)
Decorator example2
 For example, timer decorator to count time of execution.
import functools
import time
def timer(func):
"""Print the runtime of the decorated function""“
@functools.wraps(func)
def wrapper_timer(*args, **kwargs):
start_time = time.perf_counter() # 1
value = func(*args, **kwargs)
end_time = time.perf_counter() # 2
run_time = end_time - start_time # 3
print(f"Finished {func.__name__!r} in {run_time:.4f} secs")
return value
return wrapper_timer
@timer
def waste_some_time(num_times):
for _ in range(num_times):
sum([i**2 for i in range(10000)])
Decorator example2
 Execute the timer decorator with diff-2 values.
waste_some_time(1)
waste_some_time(999)
Check the output…
Decorator Appendix
 The @functools.wrapsdecorator uses the
function functools.update_wrapper()to update
special attributes like __name__and __doc__ that are used in the
introspection.
 Try below on interpriter.
>>> waste_some_time
>>> waste_some_time.__name__
>>> help(waste_some_time)
Python GIL
 What is GIL
Python Global Interpreter Lock (GIL) is a type of process lock which is used by python
whenever it deals with processes. Generally, Python only uses one thread to execute
the set of written statements. This means that in python only one thread will be
executed at a time.
Python GIL
 What problem did the GIL solve for Python
Python uses reference counting for memory management. It means that objects created in Python have
a reference count variable that keeps track of the number of references that point to the object. When
this count reaches zero, the memory occupied by the object is released.
For example:
import sys
a = []
b = a
sys.getrefcount(a)
NOTE: output of above program is 3, because the list object was referenced by a, b and the argument
passed to sys.getrefcount()
This reference counter variable needed to be protected, because sometimes two threads increase or
decrease its value simultaneously by doing that it may lead to memory leaked so in order to protect
thread we add locks to all data structures that are shared across threads but sometimes by adding locks
there exists a multiple locks which lead to another problem that is deadlock. In order to avoid memory
leaked and deadlocks problem, we used single lock on the interpreter that is Global Interpreter
Lock(GIL).
Python GIL
 Does GIL really impact multithreaded program
How to deal with GIL
 Multi-processing vs multi-threading
The most popular way is to use a multi-processing approach where you use multiple processes instead
of threads. Each Python process gets its own Python interpreter and memory space so the GIL won’t be a
problem. Python has a multiprocessing module which lets us create processes easily
 Alternative Python interpreters
Python has multiple interpreter implementations. CPython, Jython, IronPython and PyPy, written in C,
Java, C# and Python respectively, are the most popular ones. GIL exists only in the original Python
implementation that is CPython.
 Just wait it out
While many Python users take advantage of the single-threaded performance benefits of GIL. The
multi-threading programmers don’t have to fret as some of the brightest minds in the Python
community are working to remove the GIL from CPython. One such attempt is known as the Gilectomy.
Python WSGI
WSGI is not a server, a python module, a framework, an API or any kind of software. It
is just an interface specification by which server and application communicate. Both
server and application interface sides are specified in the PEP 3333.
Beneath Django, Flask, Bottle and every other Python web framework, lies the Web
Server Gateway Interface or WSGI for short. WSGI is to Python what Servlets are to
Java — a common specification for web servers that allows different web servers and
application frameworks to interact based on a common API. However, as with most
things, the Python version is considerably simpler.
Python Unittests
Unit Testing is the first level of software testing where the smallest testable parts of a
software are tested. This is used to validate that each unit of the software performs as
designed. For example.
import unittest
class SimpleTest(unittest.TestCase):
def test(self):
self.assertTrue(True)
if __name__ == '__main__':
unittest.main()
Python Unittests
There are three types of possible test outcomes :
 OK – This means that all the tests are passed.
 FAIL – This means that the test did not pass and an AssertionError exception is
raised.
 ERROR – This means that the test raises an exception other than AssertionError.
Python Unittests
Basic assertions used in the code
assertEqual() – This statement is used to check if the result
obtained is equal to the expected result.
assertTrue() / assertFalse() – This statement is
used to verify if a given statement is true or false.
assertRaises() – This statement is used to raise a specific
exception.
Questions
• ? ?
• ? Thank You

Contenu connexe

Tendances

Tendances (20)

Python revision tour i
Python revision tour iPython revision tour i
Python revision tour i
 
Programming with Python
Programming with PythonProgramming with Python
Programming with Python
 
Python basics
Python basicsPython basics
Python basics
 
Operators and Control Statements in Python
Operators and Control Statements in PythonOperators and Control Statements in Python
Operators and Control Statements in Python
 
Python Basics
Python BasicsPython Basics
Python Basics
 
Python basic
Python basicPython basic
Python basic
 
Python-01| Fundamentals
Python-01| FundamentalsPython-01| Fundamentals
Python-01| Fundamentals
 
Python Session - 4
Python Session - 4Python Session - 4
Python Session - 4
 
Python basics
Python basicsPython basics
Python basics
 
Python-02| Input, Output & Import
Python-02| Input, Output & ImportPython-02| Input, Output & Import
Python-02| Input, Output & Import
 
Programming in Python
Programming in Python Programming in Python
Programming in Python
 
FUNDAMENTALS OF PYTHON LANGUAGE
 FUNDAMENTALS OF PYTHON LANGUAGE  FUNDAMENTALS OF PYTHON LANGUAGE
FUNDAMENTALS OF PYTHON LANGUAGE
 
Python Functions Tutorial | Working With Functions In Python | Python Trainin...
Python Functions Tutorial | Working With Functions In Python | Python Trainin...Python Functions Tutorial | Working With Functions In Python | Python Trainin...
Python Functions Tutorial | Working With Functions In Python | Python Trainin...
 
Intro to Python Programming Language
Intro to Python Programming LanguageIntro to Python Programming Language
Intro to Python Programming Language
 
Introduction to Python - Part Two
Introduction to Python - Part TwoIntroduction to Python - Part Two
Introduction to Python - Part Two
 
Introduction To Programming with Python
Introduction To Programming with PythonIntroduction To Programming with Python
Introduction To Programming with Python
 
Python
PythonPython
Python
 
Python numbers
Python numbersPython numbers
Python numbers
 
Python revision tour II
Python revision tour IIPython revision tour II
Python revision tour II
 
Python
PythonPython
Python
 

Similaire à Python advance

PYTHON -Chapter 2 - Functions, Exception, Modules and Files -MAULIK BOR...
PYTHON -Chapter 2 - Functions,   Exception, Modules  and    Files -MAULIK BOR...PYTHON -Chapter 2 - Functions,   Exception, Modules  and    Files -MAULIK BOR...
PYTHON -Chapter 2 - Functions, Exception, Modules and Files -MAULIK BOR...
Maulik Borsaniya
 
Introduction to Python 01-08-2023.pon by everyone else. . Hence, they must be...
Introduction to Python 01-08-2023.pon by everyone else. . Hence, they must be...Introduction to Python 01-08-2023.pon by everyone else. . Hence, they must be...
Introduction to Python 01-08-2023.pon by everyone else. . Hence, they must be...
DRVaibhavmeshram1
 
Dsp lab _eec-652__vi_sem_18012013
Dsp lab _eec-652__vi_sem_18012013Dsp lab _eec-652__vi_sem_18012013
Dsp lab _eec-652__vi_sem_18012013
Kurmendra Singh
 

Similaire à Python advance (20)

Python_UNIT-I.pptx
Python_UNIT-I.pptxPython_UNIT-I.pptx
Python_UNIT-I.pptx
 
PYTHON -Chapter 2 - Functions, Exception, Modules and Files -MAULIK BOR...
PYTHON -Chapter 2 - Functions,   Exception, Modules  and    Files -MAULIK BOR...PYTHON -Chapter 2 - Functions,   Exception, Modules  and    Files -MAULIK BOR...
PYTHON -Chapter 2 - Functions, Exception, Modules and Files -MAULIK BOR...
 
Functions in python
Functions in pythonFunctions in python
Functions in python
 
pyton Notes9
pyton Notes9pyton Notes9
pyton Notes9
 
Data Structures and Algorithms in Python
Data Structures and Algorithms in PythonData Structures and Algorithms in Python
Data Structures and Algorithms in Python
 
Introduction to Python 01-08-2023.pon by everyone else. . Hence, they must be...
Introduction to Python 01-08-2023.pon by everyone else. . Hence, they must be...Introduction to Python 01-08-2023.pon by everyone else. . Hence, they must be...
Introduction to Python 01-08-2023.pon by everyone else. . Hence, they must be...
 
Python Interview Questions And Answers
Python Interview Questions And AnswersPython Interview Questions And Answers
Python Interview Questions And Answers
 
Advance python
Advance pythonAdvance python
Advance python
 
Functions2.pptx
Functions2.pptxFunctions2.pptx
Functions2.pptx
 
Matlab Manual
Matlab ManualMatlab Manual
Matlab Manual
 
Python interview questions and answers
Python interview questions and answersPython interview questions and answers
Python interview questions and answers
 
Dsp lab _eec-652__vi_sem_18012013
Dsp lab _eec-652__vi_sem_18012013Dsp lab _eec-652__vi_sem_18012013
Dsp lab _eec-652__vi_sem_18012013
 
Dsp lab _eec-652__vi_sem_18012013
Dsp lab _eec-652__vi_sem_18012013Dsp lab _eec-652__vi_sem_18012013
Dsp lab _eec-652__vi_sem_18012013
 
Python Lecture 4
Python Lecture 4Python Lecture 4
Python Lecture 4
 
Python interview questions and answers
Python interview questions and answersPython interview questions and answers
Python interview questions and answers
 
These questions will be a bit advanced level 2
These questions will be a bit advanced level 2These questions will be a bit advanced level 2
These questions will be a bit advanced level 2
 
User defined functions in matlab
User defined functions in  matlabUser defined functions in  matlab
User defined functions in matlab
 
Introduction to Client-Side Javascript
Introduction to Client-Side JavascriptIntroduction to Client-Side Javascript
Introduction to Client-Side Javascript
 
Matlab functions
Matlab functionsMatlab functions
Matlab functions
 
Introduction To Programming with Python-1
Introduction To Programming with Python-1Introduction To Programming with Python-1
Introduction To Programming with Python-1
 

Dernier

introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
VishalKumarJha10
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
VictorSzoltysek
 

Dernier (20)

VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...
 

Python advance

  • 1. Python Advance Deepak Chandella Email: deepchandila07@gmail.com
  • 2. Agenda  Comprehensions  Lambda with (map, filter and reduce)  Context managers  Iterator, Generators, Decorators  Python GIL and multiprocessing and multithreading  Python WSGI  Python Unittests
  • 3. Comprehensions Comprehensions in Python provide us with a short and concise way to construct new sequences (such as lists, set, dictionary etc.) using sequences which have been already defined. Python supports the following 4 types of comprehensions.  List Comprehensions  Dictionary Comprehensions  Set Comprehensions  Generator Comprehensions
  • 4. List Comprehensions  For example, if we want to create an output list which contains only the even numbers which are present in the input list. input_list = [1, 2, 3, 4, 4, 5, 6, 7, 7] list_comp = [var for var in input_list if var % 2 == 0] print("Output List:", list_comp) Note: that list comprehension may or may not contain an if condition. List comprehensions can contain multiple for (nested list comprehensions).
  • 5. Dictionary Comprehensions  For example, if we want to create an output dictionary which contains only the odd numbers that are present in the input list as keys and their cubes as values. input_list = [1,2,3,4,5,6,7] dict_comp = {var:var ** 3 for var in input_list if var % 2 != 0} print("Output Dictionary:", dict_comp)
  • 6. Set Comprehensions  Set comprehensions are pretty similar to list comprehensions.The only difference between them is that set comprehensions use curly brackets { }.  For example, if we want to create an output set which contains only the even numbers that are present in the input list. input_list = [1, 2, 3, 4, 4, 5, 6, 6, 6, 7, 7] set_comp = {var for var in input_list if var % 2 == 0} print("Output Set:", set_comp)
  • 7. Generator Comprehensions  Generator Comprehensions are very similar to list comprehensions. One difference between them is that generator comprehensions use circular brackets whereas list comprehensions use square brackets.  The major difference between them is that generators don’t allocate memory for the whole list. Instead, they generate each value one by one which is why they are memory efficient. input_list = [1, 2, 3, 4, 4, 5, 6, 7, 7] output_gen = (var for var in input_list if var % 2 == 0) print("generator object :", output_gen) for var in output_gen: print(var, end = ' ')
  • 8. Lambda In Python, Lambda functions are anonymous functions which means function without a name. Lambda definition does not include a “return” statement, it always contains an expression which is returned. cube = lambda x: x*x*x print(cube(3)) Note: Lambda functions can be used along with built-in functions like filter(), map() and reduce().
  • 9. Use of lambda with filter  The filter() function in Python takes in a function and a list as arguments.This offers an elegant way to filter out all the elements of a sequence “sequence”, for which the function returnsTrue. li = [5, 7, 22, 97, 54, 62, 77, 23, 73, 61] final_list = list(filter(lambda x: (x%2 != 0) , li)) print(final_list)
  • 10. Use of lambda with map  The map() function in Python takes in a function and a list as argument.The function is called with a lambda function and a list and a new list is returned which contains all the lambda modified items returned by that function for each item. li = [5, 7, 22, 97, 54, 62, 77, 23, 73, 61] final_list = list(map(lambda x: x*2 , li)) print(final_list)
  • 11. Use of lambda with reduce  The reduce() function in Python takes in a function and a list as argument. The function is called with a lambda function and a list and a new reduced result is returned.This performs a repetitive operation over the pairs of the list.This is a part of functools module. from functools import reduce li = [5, 8, 10, 20, 50, 100] sum = reduce((lambda x, y: x + y), li) print (sum)
  • 12. Context Manager  Managing Resources In any programming language, the usage of resources like file operations or database connections is very common. But these resources are limited in supply. Therefore, the main problem lies in making sure to release these resources after usage. If they are not released then it will lead to resource leakage and may cause the system to either slow down or crash. It would be very helpful if user have a mechanism for the automatic setup and teardown of resources. In Python, it can be achieved by the usage of context managers which facilitate the proper handling of resources.
  • 13. Error scenario for resources Let’s take the example of file management. When a file is opened, a file descriptor is consumed which is a limited resource. Only a certain number of files can be opened by a process at a time. file_descriptors = [] for x in range(100000): file_descriptors.append(open('test.txt', 'w')) Output: Traceback (most recent call last): File "context.py", line 3, in OSError: [Errno 24] Too many open files: 'test.txt‘ An error message saying that too many files are open. The above example is a case of file descriptor leakage. It happens because there are too many open files and they are not closed.
  • 14. Managing Resources using Context Manager Python provides an easy way to manage resources i.e Context Managers. The ”with”keyword is used. When it gets evaluated it should result in an object that performs context management. with open("test.txt") as f: data = f.read()
  • 15. Creating a Context Manager When creating context managers using classes, user need to ensure that the class has the methods: __enter__() and __exit__(). The __enter__() returns the resource that needs to be managed and the __exit__() does not return anything but performs the cleanup operations. class FileManager(): def __init__(self, filename, mode): self.filename = filename self.mode = mode self.file = None def __enter__(self): self.file = open(self.filename, self.mode) return self.file def __exit__(self, exc_type, exc_value, exc_traceback): self.file.close()
  • 16. Loading a file with context manager loading a file with context manager created in previous slide with FileManager('test.txt', 'w') as f: f.write('Test') print(f.closed)
  • 17. Iterator  An iterator is an object that contains a countable number of values.  An iterator is an object that can be iterated upon, meaning that you can traverse through all the values.  Technically, in Python, an iterator is an object which implements the iterator protocol, which consist of the methods __iter__() and __next__()
  • 18. Iterator vs Iterable  Lists, tuples, dictionaries, and sets are all iterable objects. They are iterable containers which you can get an iterator from.  All these objects have a iter() method which is used to get an iterator: For example: mytuple = ("apple", "banana", "cherry") myit = iter(mytuple) print(next(myit)) print(next(myit)) print(next(myit))
  • 19. Creating a Iterator  To create an object/class as an iterator you have to implement the methods __iter__() and __next__() to your object.  The __iter__() method acts similar, you can do operations (initializing etc.), but must always return the iterator object itself.  The __next__() method also allows you to do operations, and must return the next item in the sequence.  To prevent the iteration to go on forever, we can use the StopIteration statement.
  • 20. Creating a Iterator Below is a simple Python program that creates iterator type that iterates from 10 to given limit. For example, if limit is 15, then it prints 10 11 12 13 14 15. And if limit is 5, then it prints nothing. class Test: def __init__(self, limit): self.limit = limit def __iter__(self): self.x = 10 return self def next(self): x = self.x if x > self.limit: raise StopIteration self.x = x + 1; return x
  • 21. Creating a Iterator Using iterators created in previous slide…  Prints numbers from 10 to 15 for i in Test(15): print(i)  Prints nothing for i in Test(5): print(i)
  • 22. Generator  There is a lot of overhead in building an iterator. We have to implement a class with __iter__() and __next__() method, keep track of internal states, raise StopIteration when there was no values to be returned etc.  This is both lengthy and counter intuitive. Generator comes into rescue in such situations.  Python generators are a simple way of creating iterators. All the overhead we mentioned above are automatically handled by generators in Python.  Simply speaking, a generator is a function that returns an object (iterator) which we can iterate over (one value at a time).
  • 23. Creating a Generator  It is fairly simple to create a generator in Python. It is as easy as defining a normal function with yield statement instead of a return statement.  If a function contains at least one yield statement (it may contain other yield or return statements), it becomes a generator function. Both yield and return will return some value from a function.  The difference is that, while a return statement terminates a function entirely, yield statement pauses the function saving all its states and later continues from there on successive calls.
  • 24. Generator example  For example: def my_gen(): n = 1 print('This is printed first') yield n n += 1 print('This is printed second') yield n n += 1 print('This is printed at last') yield n
  • 25. Generator example  Try previous example on interpreter by calling one by one.  Or try it with for loop e.g. for item in my_gen(): print(item)
  • 26. Generator example2  Generator example that reverse a string def rev_str(my_str): length = len(my_str) for i in range(length - 1,-1,-1): yield my_str[i] for char in rev_str("hello"): print(char)
  • 27. When to use yield instead of return  Generator Return sends a specified value back to its caller whereas Yield can produce a sequence of values. We should use yield when we want to iterate over a sequence, but don’t want to store the entire sequence in memory.
  • 28. Decorator  Decorators are very powerful and useful tool in Python since it allows programmers to modify the behavior of function or class.  Decorators allow us to wrap another function in order to extend the behavior of wrapped function, without permanently modifying it.  In Decorators, functions are taken as the argument into another function and then called inside the wrapper function.  Python allows you to use decorators in a simpler way with the @ symbol, sometimes called the “pie” syntax.
  • 29. Decorator example  For example def my_decorator(func): def wrapper(): print("Something is happening before the function is called.") func() print("Something is happening after the function is called.") return wrapper @my_decorator def say_hello(): print(“Hellloooo!”)
  • 30. Decorator example2  For example, timer decorator to count time of execution. import functools import time def timer(func): """Print the runtime of the decorated function""“ @functools.wraps(func) def wrapper_timer(*args, **kwargs): start_time = time.perf_counter() # 1 value = func(*args, **kwargs) end_time = time.perf_counter() # 2 run_time = end_time - start_time # 3 print(f"Finished {func.__name__!r} in {run_time:.4f} secs") return value return wrapper_timer @timer def waste_some_time(num_times): for _ in range(num_times): sum([i**2 for i in range(10000)])
  • 31. Decorator example2  Execute the timer decorator with diff-2 values. waste_some_time(1) waste_some_time(999) Check the output…
  • 32. Decorator Appendix  The @functools.wrapsdecorator uses the function functools.update_wrapper()to update special attributes like __name__and __doc__ that are used in the introspection.  Try below on interpriter. >>> waste_some_time >>> waste_some_time.__name__ >>> help(waste_some_time)
  • 33. Python GIL  What is GIL Python Global Interpreter Lock (GIL) is a type of process lock which is used by python whenever it deals with processes. Generally, Python only uses one thread to execute the set of written statements. This means that in python only one thread will be executed at a time.
  • 34. Python GIL  What problem did the GIL solve for Python Python uses reference counting for memory management. It means that objects created in Python have a reference count variable that keeps track of the number of references that point to the object. When this count reaches zero, the memory occupied by the object is released. For example: import sys a = [] b = a sys.getrefcount(a) NOTE: output of above program is 3, because the list object was referenced by a, b and the argument passed to sys.getrefcount() This reference counter variable needed to be protected, because sometimes two threads increase or decrease its value simultaneously by doing that it may lead to memory leaked so in order to protect thread we add locks to all data structures that are shared across threads but sometimes by adding locks there exists a multiple locks which lead to another problem that is deadlock. In order to avoid memory leaked and deadlocks problem, we used single lock on the interpreter that is Global Interpreter Lock(GIL).
  • 35. Python GIL  Does GIL really impact multithreaded program
  • 36. How to deal with GIL  Multi-processing vs multi-threading The most popular way is to use a multi-processing approach where you use multiple processes instead of threads. Each Python process gets its own Python interpreter and memory space so the GIL won’t be a problem. Python has a multiprocessing module which lets us create processes easily  Alternative Python interpreters Python has multiple interpreter implementations. CPython, Jython, IronPython and PyPy, written in C, Java, C# and Python respectively, are the most popular ones. GIL exists only in the original Python implementation that is CPython.  Just wait it out While many Python users take advantage of the single-threaded performance benefits of GIL. The multi-threading programmers don’t have to fret as some of the brightest minds in the Python community are working to remove the GIL from CPython. One such attempt is known as the Gilectomy.
  • 37. Python WSGI WSGI is not a server, a python module, a framework, an API or any kind of software. It is just an interface specification by which server and application communicate. Both server and application interface sides are specified in the PEP 3333. Beneath Django, Flask, Bottle and every other Python web framework, lies the Web Server Gateway Interface or WSGI for short. WSGI is to Python what Servlets are to Java — a common specification for web servers that allows different web servers and application frameworks to interact based on a common API. However, as with most things, the Python version is considerably simpler.
  • 38. Python Unittests Unit Testing is the first level of software testing where the smallest testable parts of a software are tested. This is used to validate that each unit of the software performs as designed. For example. import unittest class SimpleTest(unittest.TestCase): def test(self): self.assertTrue(True) if __name__ == '__main__': unittest.main()
  • 39. Python Unittests There are three types of possible test outcomes :  OK – This means that all the tests are passed.  FAIL – This means that the test did not pass and an AssertionError exception is raised.  ERROR – This means that the test raises an exception other than AssertionError.
  • 40. Python Unittests Basic assertions used in the code assertEqual() – This statement is used to check if the result obtained is equal to the expected result. assertTrue() / assertFalse() – This statement is used to verify if a given statement is true or false. assertRaises() – This statement is used to raise a specific exception.
  • 42. • ? Thank You