SlideShare a Scribd company logo
Programming with Python
        Adv. Topics

          Mosky




                          1
Mosky:
●   The examples and the PDF version are available at:
    –   j.mp/mosky-programming-with-python.
●   It is welcome to give me any advice of this slide or
    ask me the answers of the challenges.
    –   mosky.tw




                                                           2
Topics
●   Basic Topics            ●   Adv. Topics
    –   Python 2 or 3?          –   Module and Package
    –   Environment             –   Typing
    –   hello.py                –   Comprehension
    –   Common Types            –   Functional Technique
    –   Flow Control            –   Object-oriented Prog.
    –   File I/O                –   Useful Libraries
    –   Documentation       ●   Final Project
    –   Scope                   –   A Blog System
                                                            3
Module and Package
Write you own module and package!




                                    4
Module and Package
●   A Python file is just a Python module:
    –   import module_a # module_a.py

●   A folder which has __init__.py is just a Python package:
    –   import package_x # __init__.py
    –   import package_x.module_b # package_x/module_b.py
    –   from . import module_c
        # (in package_x.moudle_b) package_x/module_c.py
    –   $ python -m package_x.module_b

●   Do not name your file as any built-in module.
    –   ex. sys.py



                                                               5
Module and Package (cont.)
●   The tree:
    –   .
        ├── moudle_a.py
        └── package_x
            ├── __init__.py
            ├── module_b.py
            └── module_c.py




                                         6
The import Statement
●   A module is only imported at the first import.
●   import module
    module.val = 'modified'
    –   The module is affected by this modification.
●   from module import val
    val = 'modified'
    –   The module is not affected by this modification.
    –   It does a shallow copy.

                                                           7
Typing
static? dynamic? weak? strong?




                                 8
Static Typing
●   Checking types in compile time.
●   Usually, it is required to give a type to a variable.
●   Python is not static typing.

                    long x          short y

                              double z

               c1   c2   c3   c4   c5    c6   c7   c8




                                                            9
Dynamic Typing
●   Checking types in run time.
●   A variable just points to an object.
●   Python is dynamic typing.

                            x                  object A



                            y                   object b



                                             object c

          NOTE: This is an animation and it is not correct in the PDF version.
                                                                                 10
Duck Typing




              11
Duck Typing (cont.)
●   A style of dynamic typing.
●   Happy coding without the template, the generics … etc.
●   If it is necessary to check type:
    –   if hasattr(x, '__iter__'):
        ●  adapt the type inputed
    –   assert not hasattr(x, '__iter__'), 'x must be iterable'
        ●   notify the programmer
    –   if isinstance(x, basestring):
        ●   the worst choice




                                                                  12
Duck Typing (cont.)
#!/usr/bin/env python                ●   String and integer both
# -*- coding: utf-8 -*-
# file: ex_dyn.py                        support += operator.
def dynsum(*seq):                    ●   Write the code with
    r = seq[0]
    for item in seq[1:]:
                                         elasticity.
        r += item

    return r

if __name__ == '__main__':

    print dynsum(1, 2, 3)
    print dynsum('x', 'y', 'z')




                                                                   13
Duck Typing (cont.)
●   BUT, it will confuse you when your project is
    going to big.
    –   Name your variables with hint of type.
        ●   item vs. items
        ●   employee vs. employee_name
        ●   args vs. kargs
    –   Documentation does matter.




                                                    14
Weak Typing
●   It converts the type if you do an operation which is
    not supported by the original type.
●   In JavaScript:
    –   1   + '1'
        →   '11'
    –   1   == '1'
        →   true
●   Python is not weak typing!

                                                           15
Strong Typing
●   Only do the operations which are supported by the
    original type.
    –   1   + '1'
        →   TypeError
    –   1   == '1'
        →   False
●   Python is strong typing!



                                                        16
Comprehension
Compact your statements.




                           17
List Comprehension
[i for i in   range(10)]
[i ** 2 for   i in range(10)]
[f(i) for i   in range(10)]
[i for i in   range(10) if i % 2 == 0]
[i for i in   range(10) if not i % 2 == 0]
[i for i in   range(10) if g(i)]



                                             18
List Comprehension (cont.)
List comprehension:       is equal to:
[                         r = []
    (i, j)                for i in range(3):
    for i in range(3)          for j in range(3):
    for j in range(3)               r.append((i, j))
]




                                                       19
List Comprehension (cont.)
List comprehension:         is equal to:
[                           r = []
    [                       for i in range(3):
        (i, j)                   t = []
        for i in range(3)        for j in range(3):
    ]                                      t.append((i, j))
    for j in range(3)            r.append(t)
]




                                                              20
Generator Comprehension
●   Generator comprehension:
    –   The examples:
         ●   (i for i in range(10))
         ●   f(i for i in range(10))
    –   It is like xrange.
    –   Lazy evaluation → Save memory.




                                          21
Other Comprehensions
Python 3 only:
●   set comprehension:
    –   {i for i in range(10)}
●   dict comprehension:
    –   {i:i for i in range(10)}
But we can do so with below statements:
●   set comprehension:
    –   set(i for i in range(10))
●   dict comprehension:
    –   dict((i, i) for i in range(10))



                                          22
Functional Technique
  Think in the functional way.




                                 23
The any/all Function
●   def all_even(seq):
        return all(i % 2 == 0 for i in seq)
●   all(type(item) is int for item in inputs)
●   any(i < 0 for i in inputs)




                                                24
Challenge 3-3: The Primes (cont.)
–   limit: in one line.         [2,   3, 5, 7, 11, 13,
     ●   hint: use any or all   17,   19, 23, 29, 31,
                                37,   41, 43, 47, 53,
                                59,   61, 67, 71, 73,
                                79,   83, 89, 97]




                                                         25
The zip Function
●   matrix = [
        [1, 2],
       [3, 4],
    ]
●   zip(*matrix)




                                      26
The zip Function (cont.)
●   result = [
        ('I am A.', 'email_A'),
       ('I am B.', 'email_B'),
    ]
●   emails = zip(*result)[1]




                                       27
First-class Functions

#!/usr/bin/env python           ●   passing functions as
# -*- coding: utf-8 -*-
# file: ex_do.py
                                    arguments.

from operator import add, mul

def do(action, x, y):
    return action(x, y)

if __name__ == '__main__':
    print do(add, 10, 20)
    print do(mul, 10, 20)




                                                           28
The lambda Expression
●   lambda [args]: [expression]
●   It defines an anonymous function.
●   It only allows a single expression.
●   f = lambda x: g(x)+h(x)
●   do(lambda x, y: (x+y)*(x+y), 10, 20)




                                           29
Use sort with Lambda
●   d = dict(a=300, b=200, c=100)
●   keys = d.keys()
●   keys.sort(key=lambda k: d[k])
●   for k in keys:
        print k, d[k]




                                    30
Use sort with Lambda (cont.)
●   names = ['Andy', 'Bob', 'Cindy']
●   scores = [70, 100, 95]
●   table = zip(names, scores)
●   table.sort(key=lambda pair: pair[1])
●   for name, score in table:
        print name, score



                                           31
The map Function
●   map(lambda x: x**2, range(10))
●   map(int, '1 2 3'.split(' '))
●   map(ord, 'String')
●   map(open, [<paths>])
●   map(str.split, open(<path>))




                                     32
The map Function (cont.)
●   from operator import mul
●   a = (1, 2)
●   b = (3, 4)
●   sum(map(mul, a, b))




                                      33
The filter Function
●   filter(lambda i: i % 2 == 0, range(10))
●   filter(str.isdigit, strings)
●   filter(lambda s: s.endswith('.py'),
    file_names)




                                              34
Comprehension vs. map/filter
●   [i ** 2 for i in range(10)]
●   map(lambda i: i ** 2, range(10))

●   [i ** 2 for i in range(10) if i % 2 == 0]
●   map(lambda i: i ** 2, filter(
        lambda i: i % 2 == 0,
        range(10)
    ))

                                                35
Comprehension vs. map/filter (cont.)
●   [ord(c) for c in 'ABC']
●   map(ord, 'ABC')




                                           36
Comprehension vs. map/filter (cont.)
  Compare the speeds of them:
  1. map/filter (with built-in function)
  2. comprehension
  3. map/filter




                                           37
The reduce Function
●   # from functools import reduce # py3
●   from operator import add

●   seq = [-1, 0, 1]
●   reduce(add, s)

●   seq = ['reduce ', 'the ', 'lines.']
●   reduce(add, s)

                                           38
The partial Function
●   from functools import partial
●   from operator import add

●   rdsum = partial(reduce, add)
●   rdsum([-1, 0, 1])
●   rdsum(['reduce ', 'the ', 'lines.'])



                                           39
The partial Function (cont.)
●   from functools import partial
●   from fractions import gcd as _gcd

●   _gcd(6, 14)
●   gcd = partial(reduce, _gcd)
●   gcd([6, 14, 26])



                                        40
Closure
●   from math import log

●   def mklog(n):
        return lambda x: log(x, n)

●   log10 = mklog(10)
●   log10(100) # n = 10


                                     41
Closure (cont.)
●   setattr(DictLike, attrname,
        # it is a colsure
        (lambda x:
            property(
                lambda self: self.__getitem__(x),
                lambda self, v: self.__setitem__(x, v),
                lambda self: self.__delitem__(x)
            )
        )(attrname)
    )


                                                          42
The yield Statement
●   def mkgen(n):
        for i in range(n):
            yield i ** 2

●   It is a generator.

●   gen = mkgen(10)
●   for i in gen:
        print i

                                          43
Decorator
●   def deco(f):
        def f_wrapper(*args, **kargs):
            print 'DEBUG: ', args, kargs
            return f(*args, **kargs)
        return f_wrapper

●   @deco # is equal to add = deco(add)
    def add(x, y):
        return x+y

●   add(1, 2)


                                           44
Object-oriented Programming
         is also available.




                              45
The class Statement
class Example(object):
    class_attribute = 1
    def method(self, …):
        pass
example = Example()
print example




                             46
The Class in Python (cont.)
●   Everything in Python is object.
    –   Class is an object, too.
●   All class inherit the object → new-style classes
    –   Use new-style classes. It provides more features.
    –   Python 3: auto inherit the object.
●   Supports multiple inheritance.
    –   Searching attributes/methods is like BFS.



                                                            47
Bound and Unbound Method
●   unbound method
    –   def m(self, ...)
    –   C.m(c, ...)
●   bound method (instance method)
    –   c.m(...)




                                      48
Class Method and Static Method
●   class method
    –   @classmethod
        def m(cls, …)
    –   C.m()
    –   c.m()
●   static method
    –   @staticmethod
        def m(...)
    –   C.m()
    –   c.m()


                                           49
The Data Model of Python
●   Special methods
    –   __init__
    –   __str__
    –   __repr__
    –   __getitem__ → x[key]
    –   __setitem__ → x[key] = value
    –   __delitem__ → del x[key]
        …
●   ref:
    docs.python.org/2/reference/datamodel.html

                                                 50
Protocol
●   It like interface, but it is only described in doc.
●   The examples:
    –   iterator protocol
         ●    object which supports __iter__ and next
    –   readable
         ●    object which supports read
    –   ...



                                                          51
The employee class
●   see examples/ex_empolyee.py .




                                    52
Do Math with Classes
●   see examples/ex_do_math_with_classes/ .




                                              53
Challenge 6: Give a Raise
●   Give your employee a          cindy = Empolyee(...)
    raise.                        cindy.add_salary(1000)
    –   without limit             print cindy.salary
    –   limit: prevent
        modifying salary by
        attribute.
         ●   hint: use property




                                                           54
Useful Libraries
  import antigravity




                       55
Useful Libraries
The built-in libraies:
   –   random                     –   pickle
   –   datetime                   –   json
   –   re                         –   pprint
   –   hashlib/hmac               –   gzip
   –   decimal                    –   timeit
   –   glob                       –   logging
   –   collections                –   unitest
   –   subprocess                 –   doctest
   –   multiprocessing            –   pdb
   –   gc                             ...


                                                56
Useful Libraries (cont.)
The third-party libraries on PyPI:
–   Requests – Use it instead of the poor built-in urllib.
–   lxml – Do you need to parse HTML? Use it!
–   PyYAML – YAML is a the best of data serialization standards.
–   PIL – Python Image Library
–   NumPy and SciPy – are for mathematics, science, and engineering.
–   SymPy – is for symbolic mathematic
–   Bottle, Flask or Django – are the web frameworks.
–   Sphinx – helps you to create documentation.
    ...


                                                                       57
Challenge 7: Iterable Interger
●   Make integer iterable.        x = IterableInt(10)
    –   without limit             for b in x:
    –   limit 1: don't use string     print b
    –   limit 2: use collection
        ●   hint: use property    0
                                  1
                                  0
                                  1


                                                        58
Final Project : A Blog System




                                59
Final Project : A Blog System
●   The cookbook:
    –   Flask – A micro web framework.
    –   Use pickle to store the posts.
    –   Optional:
         ●   A database instead of pickle. (ex. MySQL, PostgreSQL, ...)
         ●   A cache layer. (ex. memcached, redis, ...)
         ●   A message queue for async jobs. (ex. RabbitMQ, ...)




                                                                          60
It is the end.
Contact me? http://mosky.tw/




                               61

More Related Content

What's hot (19)

Introduction to go language programming
Introduction to go language programming
Mahmoud Masih Tehrani
 
Go Language Hands-on Workshop Material
Go Language Hands-on Workshop Material
Romin Irani
 
Gcrc talk
Gcrc talk
Tejas Dinkar
 
Python Workshop
Python Workshop
Saket Choudhary
 
PyCon 2013 : Scripting to PyPi to GitHub and More
PyCon 2013 : Scripting to PyPi to GitHub and More
Matt Harrison
 
Why Python (for Statisticians)
Why Python (for Statisticians)
Matt Harrison
 
Python Tutorial
Python Tutorial
AkramWaseem
 
Python ppt
Python ppt
Rohit Verma
 
FTD JVM Internals
FTD JVM Internals
Felipe Mamud
 
Python basics
Python basics
RANAALIMAJEEDRAJPUT
 
Introduction to Go language
Introduction to Go language
Tzar Umang
 
Go lang introduction
Go lang introduction
yangwm
 
Writing Fast Code (JP) - PyCon JP 2015
Writing Fast Code (JP) - PyCon JP 2015
Younggun Kim
 
Python Workshop
Python Workshop
Mantavya Gajjar
 
Python made easy
Python made easy
Abhishek kumar
 
Golang iran - tutorial go programming language - Preliminary
Golang iran - tutorial go programming language - Preliminary
go-lang
 
Python - Introduction
Python - Introduction
stn_tkiller
 
Php Extensions for Dummies
Php Extensions for Dummies
Elizabeth Smith
 
Introduction to Programming in Go
Introduction to Programming in Go
Amr Hassan
 
Introduction to go language programming
Introduction to go language programming
Mahmoud Masih Tehrani
 
Go Language Hands-on Workshop Material
Go Language Hands-on Workshop Material
Romin Irani
 
PyCon 2013 : Scripting to PyPi to GitHub and More
PyCon 2013 : Scripting to PyPi to GitHub and More
Matt Harrison
 
Why Python (for Statisticians)
Why Python (for Statisticians)
Matt Harrison
 
Introduction to Go language
Introduction to Go language
Tzar Umang
 
Go lang introduction
Go lang introduction
yangwm
 
Writing Fast Code (JP) - PyCon JP 2015
Writing Fast Code (JP) - PyCon JP 2015
Younggun Kim
 
Golang iran - tutorial go programming language - Preliminary
Golang iran - tutorial go programming language - Preliminary
go-lang
 
Python - Introduction
Python - Introduction
stn_tkiller
 
Php Extensions for Dummies
Php Extensions for Dummies
Elizabeth Smith
 
Introduction to Programming in Go
Introduction to Programming in Go
Amr Hassan
 

Viewers also liked (9)

Learning Git with Workflows
Learning Git with Workflows
Mosky Liu
 
Boost Maintainability
Boost Maintainability
Mosky Liu
 
Learning Python from Data
Learning Python from Data
Mosky Liu
 
Minimal MVC in JavaScript
Minimal MVC in JavaScript
Mosky Liu
 
Concurrency in Python
Concurrency in Python
Mosky Liu
 
ZIPCodeTW: Find Taiwan ZIP Code by Address Fuzzily
ZIPCodeTW: Find Taiwan ZIP Code by Address Fuzzily
Mosky Liu
 
Graph-Tool in Practice
Graph-Tool in Practice
Mosky Liu
 
Simple Belief - Mosky @ TEDxNTUST 2015
Simple Belief - Mosky @ TEDxNTUST 2015
Mosky Liu
 
Object-oriented Programming in Python
Object-oriented Programming in Python
Juan-Manuel Gimeno
 
Learning Git with Workflows
Learning Git with Workflows
Mosky Liu
 
Boost Maintainability
Boost Maintainability
Mosky Liu
 
Learning Python from Data
Learning Python from Data
Mosky Liu
 
Minimal MVC in JavaScript
Minimal MVC in JavaScript
Mosky Liu
 
Concurrency in Python
Concurrency in Python
Mosky Liu
 
ZIPCodeTW: Find Taiwan ZIP Code by Address Fuzzily
ZIPCodeTW: Find Taiwan ZIP Code by Address Fuzzily
Mosky Liu
 
Graph-Tool in Practice
Graph-Tool in Practice
Mosky Liu
 
Simple Belief - Mosky @ TEDxNTUST 2015
Simple Belief - Mosky @ TEDxNTUST 2015
Mosky Liu
 
Object-oriented Programming in Python
Object-oriented Programming in Python
Juan-Manuel Gimeno
 
Ad

Similar to Programming with Python - Adv. (20)

Python Workshop - Learn Python the Hard Way
Python Workshop - Learn Python the Hard Way
Utkarsh Sengar
 
Python Tutorial Part 1
Python Tutorial Part 1
Haitham El-Ghareeb
 
Processing data with Python, using standard library modules you (probably) ne...
Processing data with Python, using standard library modules you (probably) ne...
gjcross
 
Python bootcamp - C4Dlab, University of Nairobi
Python bootcamp - C4Dlab, University of Nairobi
krmboya
 
Python course Day 1
Python course Day 1
Karin Lagesen
 
Python study material
Python study material
Satish Nagabhushan
 
Python course
Python course
Евгений Сазонов
 
Introduction to phyton , important topic
Introduction to phyton , important topic
akpgenious67
 
Introduction to Python
Introduction to Python
UC San Diego
 
Python cheatsheat.pdf
Python cheatsheat.pdf
HimoZZZ
 
ppt_pspp.pdf
ppt_pspp.pdf
ShereenAhmedMohamed
 
Dynamic Python
Dynamic Python
Chui-Wen Chiu
 
COMPUTER SCIENCE SUPPORT MATERIAL CLASS 12.pdf
COMPUTER SCIENCE SUPPORT MATERIAL CLASS 12.pdf
rajkumar2792005
 
Training python (new Updated)
Training python (new Updated)
University of Technology
 
Python - the basics
Python - the basics
University of Technology
 
Python speleology
Python speleology
Andrés J. Díaz
 
python language programming presentation
python language programming presentation
lbisht2
 
Python Part 1
Python Part 1
Mohamed Ramadan
 
Introduction to Python for Plone developers
Introduction to Python for Plone developers
Jim Roepcke
 
Tutorial on-python-programming
Tutorial on-python-programming
Chetan Giridhar
 
Python Workshop - Learn Python the Hard Way
Python Workshop - Learn Python the Hard Way
Utkarsh Sengar
 
Processing data with Python, using standard library modules you (probably) ne...
Processing data with Python, using standard library modules you (probably) ne...
gjcross
 
Python bootcamp - C4Dlab, University of Nairobi
Python bootcamp - C4Dlab, University of Nairobi
krmboya
 
Introduction to phyton , important topic
Introduction to phyton , important topic
akpgenious67
 
Introduction to Python
Introduction to Python
UC San Diego
 
Python cheatsheat.pdf
Python cheatsheat.pdf
HimoZZZ
 
COMPUTER SCIENCE SUPPORT MATERIAL CLASS 12.pdf
COMPUTER SCIENCE SUPPORT MATERIAL CLASS 12.pdf
rajkumar2792005
 
python language programming presentation
python language programming presentation
lbisht2
 
Introduction to Python for Plone developers
Introduction to Python for Plone developers
Jim Roepcke
 
Tutorial on-python-programming
Tutorial on-python-programming
Chetan Giridhar
 
Ad

More from Mosky Liu (8)

Statistical Regression With Python
Statistical Regression With Python
Mosky Liu
 
Practicing Python 3
Practicing Python 3
Mosky Liu
 
Data Science With Python
Data Science With Python
Mosky Liu
 
Hypothesis Testing With Python
Hypothesis Testing With Python
Mosky Liu
 
Elegant concurrency
Elegant concurrency
Mosky Liu
 
Dive into Pinkoi 2013
Dive into Pinkoi 2013
Mosky Liu
 
MoSQL: More than SQL, but Less than ORM @ PyCon APAC 2013
MoSQL: More than SQL, but Less than ORM @ PyCon APAC 2013
Mosky Liu
 
MoSQL: More than SQL, but less than ORM
MoSQL: More than SQL, but less than ORM
Mosky Liu
 
Statistical Regression With Python
Statistical Regression With Python
Mosky Liu
 
Practicing Python 3
Practicing Python 3
Mosky Liu
 
Data Science With Python
Data Science With Python
Mosky Liu
 
Hypothesis Testing With Python
Hypothesis Testing With Python
Mosky Liu
 
Elegant concurrency
Elegant concurrency
Mosky Liu
 
Dive into Pinkoi 2013
Dive into Pinkoi 2013
Mosky Liu
 
MoSQL: More than SQL, but Less than ORM @ PyCon APAC 2013
MoSQL: More than SQL, but Less than ORM @ PyCon APAC 2013
Mosky Liu
 
MoSQL: More than SQL, but less than ORM
MoSQL: More than SQL, but less than ORM
Mosky Liu
 

Recently uploaded (20)

Software Engineering Process, Notation & Tools Introduction - Part 3
Software Engineering Process, Notation & Tools Introduction - Part 3
Gaurav Sharma
 
Wondershare PDFelement Pro 11.4.20.3548 Crack Free Download
Wondershare PDFelement Pro 11.4.20.3548 Crack Free Download
Puppy jhon
 
Agentic Techniques in Retrieval-Augmented Generation with Azure AI Search
Agentic Techniques in Retrieval-Augmented Generation with Azure AI Search
Maxim Salnikov
 
MOVIE RECOMMENDATION SYSTEM, UDUMULA GOPI REDDY, Y24MC13085.pptx
MOVIE RECOMMENDATION SYSTEM, UDUMULA GOPI REDDY, Y24MC13085.pptx
Maharshi Mallela
 
Women in Tech: Marketo Engage User Group - June 2025 - AJO with AWS
Women in Tech: Marketo Engage User Group - June 2025 - AJO with AWS
BradBedford3
 
Meet You in the Middle: 1000x Performance for Parquet Queries on PB-Scale Dat...
Meet You in the Middle: 1000x Performance for Parquet Queries on PB-Scale Dat...
Alluxio, Inc.
 
Software Testing & it’s types (DevOps)
Software Testing & it’s types (DevOps)
S Pranav (Deepu)
 
Application Modernization with Choreo - The AI-Native Internal Developer Plat...
Application Modernization with Choreo - The AI-Native Internal Developer Plat...
WSO2
 
Agile Software Engineering Methodologies
Agile Software Engineering Methodologies
Gaurav Sharma
 
GDG Douglas - Google AI Agents: Your Next Intern?
GDG Douglas - Google AI Agents: Your Next Intern?
felipeceotto
 
Zoneranker’s Digital marketing solutions
Zoneranker’s Digital marketing solutions
reenashriee
 
Transmission Media. (Computer Networks)
Transmission Media. (Computer Networks)
S Pranav (Deepu)
 
Advanced Token Development - Decentralized Innovation
Advanced Token Development - Decentralized Innovation
arohisinghas720
 
Smart Financial Solutions: Money Lender Software, Daily Pigmy & Personal Loan...
Smart Financial Solutions: Money Lender Software, Daily Pigmy & Personal Loan...
Intelli grow
 
Async-ronizing Success at Wix - Patterns for Seamless Microservices - Devoxx ...
Async-ronizing Success at Wix - Patterns for Seamless Microservices - Devoxx ...
Natan Silnitsky
 
Migrating to Azure Cosmos DB the Right Way
Migrating to Azure Cosmos DB the Right Way
Alexander (Alex) Komyagin
 
How to Choose the Right Web Development Agency.pdf
How to Choose the Right Web Development Agency.pdf
Creative Fosters
 
Smadav Pro 2025 Rev 15.4 Crack Full Version With Registration Key
Smadav Pro 2025 Rev 15.4 Crack Full Version With Registration Key
joybepari360
 
Shell Skill Tree - LabEx Certification (LabEx)
Shell Skill Tree - LabEx Certification (LabEx)
VICTOR MAESTRE RAMIREZ
 
Milwaukee Marketo User Group June 2025 - Optimize and Enhance Efficiency - Sm...
Milwaukee Marketo User Group June 2025 - Optimize and Enhance Efficiency - Sm...
BradBedford3
 
Software Engineering Process, Notation & Tools Introduction - Part 3
Software Engineering Process, Notation & Tools Introduction - Part 3
Gaurav Sharma
 
Wondershare PDFelement Pro 11.4.20.3548 Crack Free Download
Wondershare PDFelement Pro 11.4.20.3548 Crack Free Download
Puppy jhon
 
Agentic Techniques in Retrieval-Augmented Generation with Azure AI Search
Agentic Techniques in Retrieval-Augmented Generation with Azure AI Search
Maxim Salnikov
 
MOVIE RECOMMENDATION SYSTEM, UDUMULA GOPI REDDY, Y24MC13085.pptx
MOVIE RECOMMENDATION SYSTEM, UDUMULA GOPI REDDY, Y24MC13085.pptx
Maharshi Mallela
 
Women in Tech: Marketo Engage User Group - June 2025 - AJO with AWS
Women in Tech: Marketo Engage User Group - June 2025 - AJO with AWS
BradBedford3
 
Meet You in the Middle: 1000x Performance for Parquet Queries on PB-Scale Dat...
Meet You in the Middle: 1000x Performance for Parquet Queries on PB-Scale Dat...
Alluxio, Inc.
 
Software Testing & it’s types (DevOps)
Software Testing & it’s types (DevOps)
S Pranav (Deepu)
 
Application Modernization with Choreo - The AI-Native Internal Developer Plat...
Application Modernization with Choreo - The AI-Native Internal Developer Plat...
WSO2
 
Agile Software Engineering Methodologies
Agile Software Engineering Methodologies
Gaurav Sharma
 
GDG Douglas - Google AI Agents: Your Next Intern?
GDG Douglas - Google AI Agents: Your Next Intern?
felipeceotto
 
Zoneranker’s Digital marketing solutions
Zoneranker’s Digital marketing solutions
reenashriee
 
Transmission Media. (Computer Networks)
Transmission Media. (Computer Networks)
S Pranav (Deepu)
 
Advanced Token Development - Decentralized Innovation
Advanced Token Development - Decentralized Innovation
arohisinghas720
 
Smart Financial Solutions: Money Lender Software, Daily Pigmy & Personal Loan...
Smart Financial Solutions: Money Lender Software, Daily Pigmy & Personal Loan...
Intelli grow
 
Async-ronizing Success at Wix - Patterns for Seamless Microservices - Devoxx ...
Async-ronizing Success at Wix - Patterns for Seamless Microservices - Devoxx ...
Natan Silnitsky
 
How to Choose the Right Web Development Agency.pdf
How to Choose the Right Web Development Agency.pdf
Creative Fosters
 
Smadav Pro 2025 Rev 15.4 Crack Full Version With Registration Key
Smadav Pro 2025 Rev 15.4 Crack Full Version With Registration Key
joybepari360
 
Shell Skill Tree - LabEx Certification (LabEx)
Shell Skill Tree - LabEx Certification (LabEx)
VICTOR MAESTRE RAMIREZ
 
Milwaukee Marketo User Group June 2025 - Optimize and Enhance Efficiency - Sm...
Milwaukee Marketo User Group June 2025 - Optimize and Enhance Efficiency - Sm...
BradBedford3
 

Programming with Python - Adv.

  • 1. Programming with Python Adv. Topics Mosky 1
  • 2. Mosky: ● The examples and the PDF version are available at: – j.mp/mosky-programming-with-python. ● It is welcome to give me any advice of this slide or ask me the answers of the challenges. – mosky.tw 2
  • 3. Topics ● Basic Topics ● Adv. Topics – Python 2 or 3? – Module and Package – Environment – Typing – hello.py – Comprehension – Common Types – Functional Technique – Flow Control – Object-oriented Prog. – File I/O – Useful Libraries – Documentation ● Final Project – Scope – A Blog System 3
  • 4. Module and Package Write you own module and package! 4
  • 5. Module and Package ● A Python file is just a Python module: – import module_a # module_a.py ● A folder which has __init__.py is just a Python package: – import package_x # __init__.py – import package_x.module_b # package_x/module_b.py – from . import module_c # (in package_x.moudle_b) package_x/module_c.py – $ python -m package_x.module_b ● Do not name your file as any built-in module. – ex. sys.py 5
  • 6. Module and Package (cont.) ● The tree: – . ├── moudle_a.py └── package_x ├── __init__.py ├── module_b.py └── module_c.py 6
  • 7. The import Statement ● A module is only imported at the first import. ● import module module.val = 'modified' – The module is affected by this modification. ● from module import val val = 'modified' – The module is not affected by this modification. – It does a shallow copy. 7
  • 9. Static Typing ● Checking types in compile time. ● Usually, it is required to give a type to a variable. ● Python is not static typing. long x short y double z c1 c2 c3 c4 c5 c6 c7 c8 9
  • 10. Dynamic Typing ● Checking types in run time. ● A variable just points to an object. ● Python is dynamic typing. x object A y object b object c NOTE: This is an animation and it is not correct in the PDF version. 10
  • 12. Duck Typing (cont.) ● A style of dynamic typing. ● Happy coding without the template, the generics … etc. ● If it is necessary to check type: – if hasattr(x, '__iter__'): ● adapt the type inputed – assert not hasattr(x, '__iter__'), 'x must be iterable' ● notify the programmer – if isinstance(x, basestring): ● the worst choice 12
  • 13. Duck Typing (cont.) #!/usr/bin/env python ● String and integer both # -*- coding: utf-8 -*- # file: ex_dyn.py support += operator. def dynsum(*seq): ● Write the code with r = seq[0] for item in seq[1:]: elasticity. r += item return r if __name__ == '__main__': print dynsum(1, 2, 3) print dynsum('x', 'y', 'z') 13
  • 14. Duck Typing (cont.) ● BUT, it will confuse you when your project is going to big. – Name your variables with hint of type. ● item vs. items ● employee vs. employee_name ● args vs. kargs – Documentation does matter. 14
  • 15. Weak Typing ● It converts the type if you do an operation which is not supported by the original type. ● In JavaScript: – 1 + '1' → '11' – 1 == '1' → true ● Python is not weak typing! 15
  • 16. Strong Typing ● Only do the operations which are supported by the original type. – 1 + '1' → TypeError – 1 == '1' → False ● Python is strong typing! 16
  • 18. List Comprehension [i for i in range(10)] [i ** 2 for i in range(10)] [f(i) for i in range(10)] [i for i in range(10) if i % 2 == 0] [i for i in range(10) if not i % 2 == 0] [i for i in range(10) if g(i)] 18
  • 19. List Comprehension (cont.) List comprehension: is equal to: [ r = [] (i, j) for i in range(3): for i in range(3) for j in range(3): for j in range(3) r.append((i, j)) ] 19
  • 20. List Comprehension (cont.) List comprehension: is equal to: [ r = [] [ for i in range(3): (i, j) t = [] for i in range(3) for j in range(3): ] t.append((i, j)) for j in range(3) r.append(t) ] 20
  • 21. Generator Comprehension ● Generator comprehension: – The examples: ● (i for i in range(10)) ● f(i for i in range(10)) – It is like xrange. – Lazy evaluation → Save memory. 21
  • 22. Other Comprehensions Python 3 only: ● set comprehension: – {i for i in range(10)} ● dict comprehension: – {i:i for i in range(10)} But we can do so with below statements: ● set comprehension: – set(i for i in range(10)) ● dict comprehension: – dict((i, i) for i in range(10)) 22
  • 23. Functional Technique Think in the functional way. 23
  • 24. The any/all Function ● def all_even(seq): return all(i % 2 == 0 for i in seq) ● all(type(item) is int for item in inputs) ● any(i < 0 for i in inputs) 24
  • 25. Challenge 3-3: The Primes (cont.) – limit: in one line. [2, 3, 5, 7, 11, 13, ● hint: use any or all 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97] 25
  • 26. The zip Function ● matrix = [ [1, 2], [3, 4], ] ● zip(*matrix) 26
  • 27. The zip Function (cont.) ● result = [ ('I am A.', 'email_A'), ('I am B.', 'email_B'), ] ● emails = zip(*result)[1] 27
  • 28. First-class Functions #!/usr/bin/env python ● passing functions as # -*- coding: utf-8 -*- # file: ex_do.py arguments. from operator import add, mul def do(action, x, y): return action(x, y) if __name__ == '__main__': print do(add, 10, 20) print do(mul, 10, 20) 28
  • 29. The lambda Expression ● lambda [args]: [expression] ● It defines an anonymous function. ● It only allows a single expression. ● f = lambda x: g(x)+h(x) ● do(lambda x, y: (x+y)*(x+y), 10, 20) 29
  • 30. Use sort with Lambda ● d = dict(a=300, b=200, c=100) ● keys = d.keys() ● keys.sort(key=lambda k: d[k]) ● for k in keys: print k, d[k] 30
  • 31. Use sort with Lambda (cont.) ● names = ['Andy', 'Bob', 'Cindy'] ● scores = [70, 100, 95] ● table = zip(names, scores) ● table.sort(key=lambda pair: pair[1]) ● for name, score in table: print name, score 31
  • 32. The map Function ● map(lambda x: x**2, range(10)) ● map(int, '1 2 3'.split(' ')) ● map(ord, 'String') ● map(open, [<paths>]) ● map(str.split, open(<path>)) 32
  • 33. The map Function (cont.) ● from operator import mul ● a = (1, 2) ● b = (3, 4) ● sum(map(mul, a, b)) 33
  • 34. The filter Function ● filter(lambda i: i % 2 == 0, range(10)) ● filter(str.isdigit, strings) ● filter(lambda s: s.endswith('.py'), file_names) 34
  • 35. Comprehension vs. map/filter ● [i ** 2 for i in range(10)] ● map(lambda i: i ** 2, range(10)) ● [i ** 2 for i in range(10) if i % 2 == 0] ● map(lambda i: i ** 2, filter( lambda i: i % 2 == 0, range(10) )) 35
  • 36. Comprehension vs. map/filter (cont.) ● [ord(c) for c in 'ABC'] ● map(ord, 'ABC') 36
  • 37. Comprehension vs. map/filter (cont.) Compare the speeds of them: 1. map/filter (with built-in function) 2. comprehension 3. map/filter 37
  • 38. The reduce Function ● # from functools import reduce # py3 ● from operator import add ● seq = [-1, 0, 1] ● reduce(add, s) ● seq = ['reduce ', 'the ', 'lines.'] ● reduce(add, s) 38
  • 39. The partial Function ● from functools import partial ● from operator import add ● rdsum = partial(reduce, add) ● rdsum([-1, 0, 1]) ● rdsum(['reduce ', 'the ', 'lines.']) 39
  • 40. The partial Function (cont.) ● from functools import partial ● from fractions import gcd as _gcd ● _gcd(6, 14) ● gcd = partial(reduce, _gcd) ● gcd([6, 14, 26]) 40
  • 41. Closure ● from math import log ● def mklog(n): return lambda x: log(x, n) ● log10 = mklog(10) ● log10(100) # n = 10 41
  • 42. Closure (cont.) ● setattr(DictLike, attrname, # it is a colsure (lambda x: property( lambda self: self.__getitem__(x), lambda self, v: self.__setitem__(x, v), lambda self: self.__delitem__(x) ) )(attrname) ) 42
  • 43. The yield Statement ● def mkgen(n): for i in range(n): yield i ** 2 ● It is a generator. ● gen = mkgen(10) ● for i in gen: print i 43
  • 44. Decorator ● def deco(f): def f_wrapper(*args, **kargs): print 'DEBUG: ', args, kargs return f(*args, **kargs) return f_wrapper ● @deco # is equal to add = deco(add) def add(x, y): return x+y ● add(1, 2) 44
  • 45. Object-oriented Programming is also available. 45
  • 46. The class Statement class Example(object): class_attribute = 1 def method(self, …): pass example = Example() print example 46
  • 47. The Class in Python (cont.) ● Everything in Python is object. – Class is an object, too. ● All class inherit the object → new-style classes – Use new-style classes. It provides more features. – Python 3: auto inherit the object. ● Supports multiple inheritance. – Searching attributes/methods is like BFS. 47
  • 48. Bound and Unbound Method ● unbound method – def m(self, ...) – C.m(c, ...) ● bound method (instance method) – c.m(...) 48
  • 49. Class Method and Static Method ● class method – @classmethod def m(cls, …) – C.m() – c.m() ● static method – @staticmethod def m(...) – C.m() – c.m() 49
  • 50. The Data Model of Python ● Special methods – __init__ – __str__ – __repr__ – __getitem__ → x[key] – __setitem__ → x[key] = value – __delitem__ → del x[key] … ● ref: docs.python.org/2/reference/datamodel.html 50
  • 51. Protocol ● It like interface, but it is only described in doc. ● The examples: – iterator protocol ● object which supports __iter__ and next – readable ● object which supports read – ... 51
  • 52. The employee class ● see examples/ex_empolyee.py . 52
  • 53. Do Math with Classes ● see examples/ex_do_math_with_classes/ . 53
  • 54. Challenge 6: Give a Raise ● Give your employee a cindy = Empolyee(...) raise. cindy.add_salary(1000) – without limit print cindy.salary – limit: prevent modifying salary by attribute. ● hint: use property 54
  • 55. Useful Libraries import antigravity 55
  • 56. Useful Libraries The built-in libraies: – random – pickle – datetime – json – re – pprint – hashlib/hmac – gzip – decimal – timeit – glob – logging – collections – unitest – subprocess – doctest – multiprocessing – pdb – gc ... 56
  • 57. Useful Libraries (cont.) The third-party libraries on PyPI: – Requests – Use it instead of the poor built-in urllib. – lxml – Do you need to parse HTML? Use it! – PyYAML – YAML is a the best of data serialization standards. – PIL – Python Image Library – NumPy and SciPy – are for mathematics, science, and engineering. – SymPy – is for symbolic mathematic – Bottle, Flask or Django – are the web frameworks. – Sphinx – helps you to create documentation. ... 57
  • 58. Challenge 7: Iterable Interger ● Make integer iterable. x = IterableInt(10) – without limit for b in x: – limit 1: don't use string print b – limit 2: use collection ● hint: use property 0 1 0 1 58
  • 59. Final Project : A Blog System 59
  • 60. Final Project : A Blog System ● The cookbook: – Flask – A micro web framework. – Use pickle to store the posts. – Optional: ● A database instead of pickle. (ex. MySQL, PostgreSQL, ...) ● A cache layer. (ex. memcached, redis, ...) ● A message queue for async jobs. (ex. RabbitMQ, ...) 60
  • 61. It is the end. Contact me? http://mosky.tw/ 61