Survey
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
Python Programming Language
Python Programming Language
Created in 1991 by Guido Van Rossum
Python Programming Language
General Purpose Language
Clean Syntax
Python Programming Language
General Purpose Language
Clean Syntax
Easy to Learn
Python Programming Language
General Purpose Language
Clean Syntax
Easy to Learn
Easy to Debug
Python Programming Language
General Purpose Language
Clean Syntax
Easy to Learn
Easy to Debug
“Natural Feeling”
Python Programming Language
General Purpose Language
Interpreted
Python Programming Language
General Purpose Language
Interpreted
No Compilation Phase
Python Programming Language
General Purpose Language
Interpreted
No Compilation Phase
Multiplatform Integration
Python Programming Language
General Purpose Language
Interpreted
No Compilation Phase
Multiplatform Integration
Native Debugger
Python Programming Language
General Purpose Language
Interpreted
Duck Typing
Python Programming Language
General Purpose Language
Interpreted
Duck Typing
Override behaviours by creating methods
Python Programming Language
General Purpose Language
Interpreted
Duck Typing
Override behaviours by creating methods
Implement operations by creating
methodst
Python Programming Language
General Purpose Language
Interpreted
Duck Typing
Override behaviours by creating methods
Implement operations by creating
methods
All data is an object
Python Programming Language
Objects are Python’s abstraction for data. All
data in a Python program is represented by
objects or by relations between objects.
Every object has an identity, a type and a
value.
Python Programming Language
An object’s identity never changes once it has
been created
The ‘is‘ operator compares the identity of
two objects
The id() function returns an integer
representing its identity
Python Programming Language
An object’s identity never changes once it has
been created
The ‘is‘ operator compares the identity of
two objects
The id() function returns an integer
representing its identity
An object’s type is also unchangeable.
The type() function returns an object’s
type (which is an object itself).
Python Programming Language
General Purpose Language
Interpreted
Duck Typing
Strongly Typed
Python Programming Language
A Python programmer can write in any style
they like, using design patterns borrowed
from:
Imperative
Declarative
Object Oriented
functional programming
The author is free let the problem guide the
development of the solution.
Python Programming Language
print('hello world')
class Hello(object):
def __init__(self, my_string):
self.my_string = my_string
def __call__(self, render_func):
out_str = 'Hello %s' % self.my_string
render_func(out_str)
def print_string(string_to_print):
print(string_to_print)
myHelloWorldClass = Hello('world')
myHelloWorldClass(print_string)
Java:
Functional Example
public class OuterClass {
// Inner class
class AddN {
AddN(int n) { _n = n; }
int add(int v) { return _n + v; }
private int _n;
}
public AddN createAddN(int var) {
return new AddN(var);
}
}
LISP
(define (addn n) (lambda (k) (+ n k)))
Python
addn = lambda n: lambda x: x + n
Or
def addN(n):
def add_n(x):
return x + n
return add_n
Modular Design
The standard Python interpreter (CPython) is
written in C89
It is designed with two-way interfacing in
mind:
Embedding C programs in Python
Embedding Python programs in C
Modular Design
An Example C Module
#include <Python.h>
static PyObject *
spam_system(PyObject *self, PyObject *args)
{
const char *command;
int sts;
if (!PyArg_ParseTuple(args, "s", &command))
return NULL;
sts = system(command);
return Py_BuildValue("i", sts);
}
/*********************************************************
** import spam
**
** spam.system(
**
** 'find . -name "*.py"
**
**
-exec grep -Hn "Flying Circus" {} \;')
**
*********************************************************/
Cross Platform Execution
The CPython interpreter can be built on most
platforms with a standard C library including
glibc and uclibc.
Cross Platform Execution
Interpreters such as Jython and IronPython
can be used to run a python interpreter on
any Java or .NET VM respectively.
Python Is Good For
Protyping
Python Is Good For
Protyping
Web Applications/SAS
Python Is Good For
Protyping
Web Applications/SAS
Integration
Python Is Good For
Protyping
Web Applications/SAS
Integration
Transport Limited Applications
Python Is Good For
Protyping
Web Applications/SAS
Integration
Transport Limited Applications
Indeterminate Requirements
Python Is Good For
Protyping
Web Applications/SAS
Integration
Transport Limited Applications
Indeterminate requirements
Short Relevence Lifetime
Python Is Good For
Protyping
Web Applications/SAS
Integration
Transport Limited Applications
Indeterminate requirements
Short Relevence Lifetime
Porting Legacy Applications
Python Is Good For
Protyping
Web Applications/SAS
Integration
Transport Limited Applications
Indeterminate requirements
Short Relevence Lifetime
Porting Legacy Applications
Glue
Python is Not Good For
Native Cryptography
Python is Not Good For
Native Cryptography
MILOR
Python is Not Good For
Native Cryptography
MILOR
Highly Parallel Design
__Types__
None
__Types__
None
NotImplemented
__Types__
None
NotImplemented
Boolean
__Types__
None
NotImplemented
Boolean
Int/LongInt
__Types__
None
NotImplemented
Boolean
Int/LongInt
Float (which is really a double)
__Types__
None
NotImplemented
Boolean
Int/LongInt
Float (which is really a double)
Complex (double +doubleJ)
__Types__
None
NotImplemented
Boolean
Int/LongInt
Float (which is really a double)
Complex (double +doubleJ)
Sequences...
__Types__
Sequences
string
unicode
bytes
tuple
list
set
frozenset
__Types__
None
NotImplemented
Boolean
Int/LongInt
Float (which is really a double)
Complex (double +doubleJ)
Sequences...
Mapping Types (dict)
__Types__
None
NotImplemented
Boolean
Int/LongInt
Float (which is really a double)
Complex (double +doubleJ)
Sequences...
Mapping Types (dict)
Functions and Methods
__Types__
None
NotImplemented
Boolean
Int/LongInt
Float (which is really a double)
Complex (double +doubleJ)
Sequences...
Mapping Types (dict)
Functions and Methods
Generators
__Types__
None
NotImplemented
Boolean
Int/LongInt
Float (which is really a double)
Complex (double +doubleJ)
Sequences...
Mapping Types (dict)
Functions and Methods
Generators
Modules
__Types__
None
NotImplemented
Boolean
Int/LongInt
Float (which is really a double)
Complex (double +doubleJ)
Sequences...
Mapping Types (dict)
Functions and Methods
Generators
Modules
File/Buffer
__Types__
None
NotImplemented
Boolean
Int/LongInt
Float (which is really a double)
Complex (double +doubleJ)
Sequences...
Mapping Types (dict)
Functions and Methods
Generators
Modules
File/Buffer
Type (metaclasses)
Special Duck Methods
__abs__
__add__
__and__
__iter__
__getitem__
__iter__
__del__
__cmp__!
__hash__
__lt__
For Example
Example Code
class Foo:
baz = 'monkey'
def bar(self):
self.printFunc(self.text)
foo = Foo()
foo.text = 'Hello World'
def print_console_factory(
filter_func=lambda a: a
):
def print_console(text):
print(filter_func(text))
return print_console
foo.printFunc =
print_console_factory()
print_hello_world = foo.bar
print_hello_world()
>>> Hello World
vowels = [ 'a', 'e', 'i', 'o', 'u' ]
filter_vowels = lambda a:
''.join([ let
for let in a
if not
let.lower() in vowels
])
foo.printFunc =
print_console_factory(filter_vowels)
print_hello_world()
>>>Hll Wrld
Python Resources
Python.org Documentation
http://www.python.org
Python.org PEPs
http://www.python.org/dev/peps/
Ye Olde Cheese Shoppe
http://pypi.python.org/pypi
Alternate Implementation
C API
http://docs.python.org/extending
Create C Modules
Execute Python within a C application
Interface via a C API
Alternate Implementation
Jython
http://www.jython.org/Project
Native JVM Python interpreter
Full support for standard library
Other C Extensions may not be ported
Python extensions may rely on C
extensions
Alternate Implementation
PyPy
http://codespeak.net/pypy/dist/pypy/doc/
Python interpreter written in python
Framework interprets multiple languages
Highly extendable
Slow
Alternate Implementation
Psyco
http://psyco.sourceforge.net
Actually a C module
Produces highly optimized C code from
python bytecode
Excellent performance characteristics
Configurable
Alternate Implementation
IronPython
http://codesplex.com/Wiki/View.aspx?Proj
ectName=IronPython
Native python interpreter (C#) for .NET
Full support for standard library
Many external modules have been ported
Porting modules is quite simple
Can integrate with .NET languages
Alternate Implementation
PyJamas
http://code.google.com/p/pyjamas/
Python interpreter for JavaScript
Cross browser fully supported
As lightweight as you'd think
JSON/JQuery may be a better option
Alternate Implementation
ShedSkin
http://code.google.com/p/shedskin/
Produces C++ code from Python code
Excellent for prototyping
Some language features not supported
Implicit static typed code only
Alternate Implementation
Cython
http://www.cython.org
Embed C code in a python application
Excellent for use in profiling
Compiled at first runtime
Shared build env with python interpreter
Hosting Python
mod_python
By far most common hosting mechanism
http://modpython.org
Apache2 specific
Interpreter embedded in webserver
worker
Memory intensive
Fast
Hosting Python
WSGI
Up and coming – for a good reason
http://code.google.com/p/modwsgi/
http://code.google.com/p/isapi-wsgi/
Can embedded interpreter
Can run threaded standalong app server
Very fast and inexpensive
Sandboxing supported
Hosting Python
FastCGI
Mature and stable
Requires no 3rd party modules for most
webservers
Fast and inexpensive
Sandboxing supported
Hosting Python
CGI
Mature and stable
Supported on nearly all platforms
Very flexible in terms of hosting
requirements
Slow
Web Frameworks
Django
http://www.djangoproject.com/
Active user community
Well documented
Currently under active development
Extensive meta and mock classes
Clean layer separation
Web Frameworks
Django
Data Layer
Business Logic
Control Layer
Presentation Layer
Not just for the web
Web Frameworks
Turbogears – CherryPy
http://www.turbogears.org
Persistent app server
Javascript integration via mochikit
Flexible DB backend via SQLObject
Web Frameworks
Pylons - Paste
http://www.pylonshq.org/
Multiple DB Backends supported
Multiple templating languages pluggable
Multiple request dispatching
HTTP oriented
Forward compatible
MVC Type layer separation
Web Frameworks
Zope
http://www.zope.org
Web Application Framework
Highly Web Oriented
Not lightweight
Highly Featureful
ZDB Data store backend
Web Frameworks
Zope
http://www.zope.org
Web Application Framework
Highly Web Oriented
Not lightweight
Highly Featureful
ZDB Data store backend