Movatterモバイル変換


[0]ホーム

URL:


Mosky Liu, profile picture
Uploaded byMosky Liu
PDF, PPTX2,531 views

Programming with Python - Adv.

The document covers advanced Python programming topics including modules, packages, typing (static, dynamic, weak, strong), comprehensions, functional techniques, first-class functions, and object-oriented programming. It introduces various useful libraries and culminates in a final project focused on creating a blog system. Additionally, it emphasizes best practices in coding, such as documentation and variable naming conventions.

Embed presentation

Download as PDF, PPTX
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 PackageWrite 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
Typingstatic? 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 rif __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 #
Strong Typing●   Only do the operations which are supported by the    original type.    –   1   + '1'        →   TypeError    –   1   == '1'        →   False●   Python is strong typing!                                                        16
ComprehensionCompact 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 ComprehensionsPython 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, muldef 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 Statementclass Example(object):    class_attribute = 1    def method(self, …):        passexample = 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 LibrariesThe 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

Recommended

PDF
Programming with Python - Basic
PDF
Python idiomatico
PPTX
Learn python – for beginners
PDF
Os Goodger
PDF
Introduction to Clime
ODP
OpenGurukul : Language : Python
PDF
Beyond the Style Guides
PDF
The Benefits of Type Hints
PDF
PyCon 2013 : Scripting to PyPi to GitHub and More
PPTX
Python basics
PDF
Python Workshop
PPT
Python ppt
PPTX
Php Extensions for Dummies
PPT
Python - Introduction
PDF
Introduction to Programming in Go
PDF
Python made easy
PDF
Python Tutorial
PDF
Introduction to go language programming
PPT
Go lang introduction
 
PDF
Gcrc talk
PDF
Why Python (for Statisticians)
PDF
Python Workshop
PDF
Introduction to Go language
PDF
Writing Fast Code (JP) - PyCon JP 2015
PPTX
Go Language Hands-on Workshop Material
PDF
FTD JVM Internals
PPTX
Golang iran - tutorial go programming language - Preliminary
PDF
Graph-Tool in Practice
PDF
Learning Python from Data
PDF
Concurrency in Python

More Related Content

PDF
Programming with Python - Basic
PDF
Python idiomatico
PPTX
Learn python – for beginners
PDF
Os Goodger
PDF
Introduction to Clime
ODP
OpenGurukul : Language : Python
PDF
Beyond the Style Guides
PDF
The Benefits of Type Hints
Programming with Python - Basic
Python idiomatico
Learn python – for beginners
Os Goodger
Introduction to Clime
OpenGurukul : Language : Python
Beyond the Style Guides
The Benefits of Type Hints

What's hot

PDF
PyCon 2013 : Scripting to PyPi to GitHub and More
PPTX
Python basics
PDF
Python Workshop
PPT
Python ppt
PPTX
Php Extensions for Dummies
PPT
Python - Introduction
PDF
Introduction to Programming in Go
PDF
Python made easy
PDF
Python Tutorial
PDF
Introduction to go language programming
PPT
Go lang introduction
 
PDF
Gcrc talk
PDF
Why Python (for Statisticians)
PDF
Python Workshop
PDF
Introduction to Go language
PDF
Writing Fast Code (JP) - PyCon JP 2015
PPTX
Go Language Hands-on Workshop Material
PDF
FTD JVM Internals
PPTX
Golang iran - tutorial go programming language - Preliminary
PyCon 2013 : Scripting to PyPi to GitHub and More
Python basics
Python Workshop
Python ppt
Php Extensions for Dummies
Python - Introduction
Introduction to Programming in Go
Python made easy
Python Tutorial
Introduction to go language programming
Go lang introduction
 
Gcrc talk
Why Python (for Statisticians)
Python Workshop
Introduction to Go language
Writing Fast Code (JP) - PyCon JP 2015
Go Language Hands-on Workshop Material
FTD JVM Internals
Golang iran - tutorial go programming language - Preliminary

Viewers also liked

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

Similar to Programming with Python - Adv.

PDF
Python bootcamp - C4Dlab, University of Nairobi
PDF
Introduction to phyton , important topic
PPTX
Python Workshop - Learn Python the Hard Way
PDF
Python Part 1
PPT
python language programming presentation
ODP
Python course Day 1
PDF
COMPUTER SCIENCE SUPPORT MATERIAL CLASS 12.pdf
PDF
Python - the basics
PPTX
Python Tutorial Part 1
PDF
Tutorial on-python-programming
PDF
Introduction to Python for Plone developers
ODP
Dynamic Python
PPT
PDF
Processing data with Python, using standard library modules you (probably) ne...
PDF
Python cheatsheat.pdf
PPT
Python study material
PDF
Introduction to Python
PDF
Training python (new Updated)
PDF
ppt_pspp.pdf
PDF
Python speleology
Python bootcamp - C4Dlab, University of Nairobi
Introduction to phyton , important topic
Python Workshop - Learn Python the Hard Way
Python Part 1
python language programming presentation
Python course Day 1
COMPUTER SCIENCE SUPPORT MATERIAL CLASS 12.pdf
Python - the basics
Python Tutorial Part 1
Tutorial on-python-programming
Introduction to Python for Plone developers
Dynamic Python
Processing data with Python, using standard library modules you (probably) ne...
Python cheatsheat.pdf
Python study material
Introduction to Python
Training python (new Updated)
ppt_pspp.pdf
Python speleology

More from Mosky Liu

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

Recently uploaded

PDF
Red Hat Summit 2025 - Triton GPU Kernel programming.pdf
PDF
How Does AI Improve Location-Based Mobile App Development for Businesses.pdf
PDF
Combinatorial Interview Problems with Backtracking Solutions - From Imperativ...
PPT
This-Project-Demonstrates-How-to-Create.ppt
PDF
nsfconvertersoftwaretoconvertNSFtoPST.pdf
PDF
Imed Eddine Bouchoucha | computer engineer | software Architect
PDF
SecureChain AI (SCAI) Token – Smart Contract Security Audit Report by EtherAu...
PPTX
Deep Dive into Durable Functions, presented at Cloudbrew 2025
PPTX
Managed Splunk Partner vs In-House: Cost, Risk & Value Comparison
PDF
Operating System (OS) :UNIT-I Introduction to Operating System BCA SEP SEM-II...
PDF
Manual vs Automated Accessibility Testing – What to Choose in 2025.pdf
PDF
Data structure using C :UNIT-I Introduction to Data structures and Stacks BCA...
DOCX
How to Change Classic SharePoint to Modern SharePoint (An Updated Guide)
PDF
Database Management Systems(DBMS):UNIT-II Relational Data Model BCA SEP SEM ...
PDF
Cloud-Based Underwriting Software for Insurance
PPTX
Why Your Business Needs Snowflake Consulting_ From Data Silos to AI-Ready Cloud
 
PPTX
GDS Integration Solution | GDS Integration Service
PDF
Intelligent CRM for Insurance Brokers: Managing Clients with Precision
PPTX
AI Clinic Management Software for Otolaryngology Clinics Bringing Precision, ...
PPTX
AI Clinic Management Software for Pulmonology Clinics Bringing Clarity, Contr...
Red Hat Summit 2025 - Triton GPU Kernel programming.pdf
How Does AI Improve Location-Based Mobile App Development for Businesses.pdf
Combinatorial Interview Problems with Backtracking Solutions - From Imperativ...
This-Project-Demonstrates-How-to-Create.ppt
nsfconvertersoftwaretoconvertNSFtoPST.pdf
Imed Eddine Bouchoucha | computer engineer | software Architect
SecureChain AI (SCAI) Token – Smart Contract Security Audit Report by EtherAu...
Deep Dive into Durable Functions, presented at Cloudbrew 2025
Managed Splunk Partner vs In-House: Cost, Risk & Value Comparison
Operating System (OS) :UNIT-I Introduction to Operating System BCA SEP SEM-II...
Manual vs Automated Accessibility Testing – What to Choose in 2025.pdf
Data structure using C :UNIT-I Introduction to Data structures and Stacks BCA...
How to Change Classic SharePoint to Modern SharePoint (An Updated Guide)
Database Management Systems(DBMS):UNIT-II Relational Data Model BCA SEP SEM ...
Cloud-Based Underwriting Software for Insurance
Why Your Business Needs Snowflake Consulting_ From Data Silos to AI-Ready Cloud
 
GDS Integration Solution | GDS Integration Service
Intelligent CRM for Insurance Brokers: Managing Clients with Precision
AI Clinic Management Software for Otolaryngology Clinics Bringing Precision, ...
AI Clinic Management Software for Pulmonology Clinics Bringing Clarity, Contr...

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 PackageWriteyou 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
  • 8.
  • 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
  • 11.
  • 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/envpython ● 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 rif __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 #"https://www.slideshare.net/slideshow/programming-with-python-adv/17138649#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
  • 17.
  • 18.
    List Comprehension[i fori 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.)Listcomprehension: 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.)Listcomprehension: 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 ComprehensionsPython 3only:● 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 TechniqueThink 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: ThePrimes (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, muldef 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 withLambda● 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 withLambda (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 StatementclassExample(object): class_attribute = 1 def method(self, …): passexample = Example()print example 46
  • 47.
    The Class inPython (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 UnboundMethod● unbound method – def m(self, ...) – C.m(c, ...)● bound method (instance method) – c.m(...) 48
  • 49.
    Class Method andStatic Method● class method – @classmethod def m(cls, …) – C.m() – c.m()● static method – @staticmethod def m(...) – C.m() – c.m() 49
  • 50.
    The Data Modelof 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 withClasses● see examples/ex_do_math_with_classes/ . 53
  • 54.
    Challenge 6: Givea 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 Librariesimport antigravity 55
  • 56.
    Useful LibrariesThe built-inlibraies: – 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.)Thethird-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: IterableInterger● 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 theend.Contact me? http://mosky.tw/ 61

[8]ページ先頭

©2009-2025 Movatter.jp