SlideShare a Scribd company logo
1 of 61
Download to read offline
Intro to Python
   by Daniel Greenfeld
Intro to Python
                 a.k.a.
21 cool things you can do with Python
Tons of content
• Please hold your questions until the end
• Latest slides will be made available
• Special thanks to:
   • Raymond Hettinger
   • David Beazley
   • Audrey Roy
   • The Python community
Daniel Greenfeld
                                       • pydanny
                                       • twitter.com/pydanny
                                       • github.com/pydanny
                                       • pydanny.blogspot.com
                                       • pydanny-event-notes.rtfd.org
   IMG goes here


http://www.flickr.com/photos/pydanny/4442245488/
Daniel Greenfeld
                    • Python/Django Developer
                    • Cartwheel Web
                      • Makers of
                      • Makers of Open Comparison
                    • Los Angeles
   IMG goes here    • Capoeira
                    • Fiancee is Audrey Roy
http://www.flickr.com/photos/pydanny/4442245488/
Intro to Python
Who uses Python?
    All the cool kids do!
Who uses Python?
What is Python?
What is Python?
• Over 20 years old
• Dynamic, strongly typed scripting language
• Multi-paradigm programming language
 • Object Oriented
 • Functional
 • Procedural
 • Reflective
What is Python?
• Free and open source
• Fast enough
 • Check out PyPy
• Batteries included language
What is Python?




       http://en.wikipedia.org/wiki/File:Flyingcircus_2.jpg




It’s named after Monty Python
Python is similar to...
• Perl
• Ruby
• Lisp
• Java
Python is different than...
• Perl
• Ruby
• Lisp
• Java
Python Core Concepts
Whitespace!
""" whitespace.py """
from random import randrange

def numberizer():
    # Generate a random number from 1 to 10.
    return randrange(1, 11)

number = numberizer()
if number > 5:
    print("This number is big!")

class RandomNumberHolder(object):
    # Create and hold 20 random numbers using numberizer

    def __init__(self):
        self.numbers = [numberizer(x) for x in range(20)]

random_numbers = RandomNumberHolder()
Whitespace!


def numberizer():
    # Generate a random number from 1 to 10.
    return randrange(1, 11)
Whitespace!


number = numberizer()
if number > 5:
    print("This number is big!")
Whitespace!

class RandomNumberHolder(object):
    # Create and hold 20 random numbers
        # using numberizer

   def __init__(self):

       self.numbers = [numberizer(x) for x...

random_numbers = RandomNumberHolder()
Philosophy of
        Core Developers
• Conservative growth
• Aim for a simple implementation
• “We read Knuth so you don’t have to”
Zen of Python
>>> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
Culture of Documentation
• Django Web Framework
 • http://djangoproject.com
• Document everything and document well
• Make your documentation accessible
 • http://readthedocs.org
 • http://python-requests.org
 • http://bit.ly/oc_ref (Open Comparison reference)
Which Python?
For learning and simple scripting...

Use what is on your
 system by default.
    If you are running Linux or
   BSD you already have Python
$
$ python
Python 2.7.1+ (r271:86832, Apr 11 2011,
18:13:53)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or
"license" for more information.
>>>
>>> 3 + 4
7
>>> a = 5 * 10
>>> a
50
>>> def add(a, b):
...     return a + b
...
>>> add(3,4)
7
>>> add('Py','thon')
'Python'
Don’t have Python yet?


   Download 3.2
Unless you are working with a tool
with a specific Python dependency
 (e.g. Django requires Python 2.7)
21 cool things you
can do with Python
#1 Run it anywhere
  Linux                  Windows
FreeBSD                  Mac OS X                         JVM
OpenBSD                   Solaris                        .NET
NetBSD                    HP-UX                        Android OS
  BSD                      OS/2
     http://en.wikipedia.org/wiki/CPython#Supported_platforms
#2 Learn it fast
     Python is easy to learn but powerful.

Experienced developers get up to speed in days.

Lots of tutorials in the area taught by PyLadies.

      http://learnpythonthehardway.org/
#3 Introspect
                a.k.a Introducing the String type
>>> foo = 'bar'
>>> spam = 'eggs'
>>> fun = 'spam and EGGS   '
                                   dir() is a Python built-in function
>>> dir(fun)
['__add__', '__class__', '__contains__', '__delattr__', '__doc__',
'__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__',
'__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__',
'__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__',
'__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__',
                                http://en.wikipedia.org/wiki/File:Flyingcircus_2.jpg
'__rmul__', '__setattr__', '__sizeof__', '__str__','__subclasshook__',
'_formatter_field_name_split', '_formatter_parser', 'capitalize',
'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs',
 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower',
'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip',
'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition',
'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip',
'swapcase', 'title', 'translate', 'upper','zfill']
#3 Introspect
                 a.k.a Introducing the String type
>>> fun
'spam and EGGS     '
>>> fun.strip()
'spam and EGGS'               type() returns the type of object
>>> spam.title()
'Spam And Eggs   '
>>> fun.capitalize()
'Spam and eggs   '
>>> fun.index('a')       Line comments start with ‘# ‘
2
>>> type(fun)
<type 'str'>
>>> len(fun) # built-in that gives length of object
16
>>> fun[0:5] # String slicing             help() is a
'spam '
>>> help(fun)                           Python built-in
no Python documentation found for 'spam and EGGS      '
>>> help(str)
                                     str is the Python
                                     string type object
#3 Introspect
                a.k.a Introducing the String type
>>> help(str)
Help on class str in module __builtin__:

class str(basestring)
 | str(object) -> string
 |
 | Return a nice string representation of the object.
 | If the argument is a string, the return value is the same object.
 |
 | Method resolution order:
 |      str
 |      basestring
 |      object
 |
 | Methods defined here:
 |
 | __add__(...)
 |      x.__add__(y) <==> x+y
 |
 | __contains__(...)
 |      x.__contains__(y) <==> y in x
#3 Introspect
                a.k.a Introducing the String type
>>> help(str)
| capitalize(...)
|      S.capitalize() -> string
|
|      Return a copy of the string S with only its first character
|      capitalized.
|
| center(...)
|      S.center(width[, fillchar]) -> string
|
|      Return S centered in a string of length width. Padding is
|      done using the specified fill character (default is a space)
|
| count(...)
|      S.count(sub[, start[, end]]) -> int
|
|      Return the number of non-overlapping occurrences of substring sub
in
|      string S[start:end]. Optional arguments start and end are
interpreted
|      as in slice notation.
#4 Things with Strings
>>> scale = 'Southern California Linux Expo'
>>> scale[0]
'S'
>>> scale[0:8]
'Southern'
>>> scale[:-5]
'Southern California Linux'
                                        Strings are immutable
>>> scale[0:8] = 'Northern'
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>> scale.replace('Southern California','SoCal')
'SoCal Linux Expo'
>>> scale
'Southern California Linux Expo'
>>> scale = scale.replace('Southern California','SoCal')
>>> scale
'SoCal Linux Expo'
>>> scale.startswith('Windows')
False
>>> scale.endswith('Windows')
False
>>> scale.startswith('SoCal')
True
>>> 'Windows' in scale
False
>>> 'Linux' in scale
True
#5 String formatting
>>> a = "Daniel"
>>> b = "Adam"
>>> c = "Greenfeld"
>>> a + b + c
'DanielAdamGreenfeld'
>>> "{0} {1} {2}".format(a, b, c)
'Daniel Adam Greenfeld'
>>> "{first} {middle} {last}".format(first=a, middle=b, last=c)
'Daniel Adam Greenfeld'
>>> lst = [a,b,c]
>>> lst
['Daniel', 'Adam', 'Greenfeld']
>>> name =" ".join(lst)
>>> name
'Daniel Adam Greenfeld'
#6 Basic Operations
>>> x, y, z = 5, 10, 15
>>> 5 < 10
True
>>> 5 > 10
False
                             Python has advanced math
>>> True == False             features that comes with
False
>>> (5 == x) or (10 == x)        the standard library.
True
>>> (5 == x) and (10 == x)
False
>>> x + y - z
0
>>> 10 * 5                      For scientific needs,
50
>>> 10 / 5                      numpy is available.
2
>>> 10 + 5
15
>>> 10 ** 2
100
#7 Lists
>>> my_list = [1, 2, 3]
>>> my_list.append(4)
>>> my_list                           Lists are mutable
[1, 2, 3, 4]
>>> my_list.insert(2, 'dog')
>>> my_list
                                    Tuples are not mutable
[1, 2, 'dog', 3, 4]
>>> my_list.extend([5, 6])
>>> my_list
[1, 2, 'dog', 3, 4, 5, 6]
>>> my_list.append([7, 8])
>>> my_list
[1, 2, 'dog', 3, 4, 5, 6, [7, 8]]
>>> my_list.pop(2)
'dog'
>>> my_list
[1, 2, 3, 4, 5, 6, [7, 8]]
>>> my_list.reverse()
>>> my_list
[[7, 8], 6, 5, 4, 3, 2, 1]
#8 Lists + Functional Programming
>>>   def divisible_by_2(x):
...      return x % 2 == 0
...
>>>                                     Filter constructs a list from
>>>   def cube(x):
...      return x ** 3
                                       those elements of an iterable
...                                   for which the specified function
>>>
>>>   numbers = [1, 2, 3, 4, 6, 31]
                                                returns True.
>>>
>>>   filter(divisible_by_2, numbers)
[2,   4, 6]
>>>
>>>   map(cube, numbers)
[1,   8, 27, 64, 216, 29791]         Map applies the specified
                                   function to every item of the
                                 iterable and returns the results.
#9 List Comprehensions
                            Remember
""" whitespace.py """
from random import randrange                         this
def numberizer():                                 from the
    # Generate a random number from 1 to 10.
    return randrange(1, 11)
                                                 beginning?
number = numberizer()
if number > 5:
              List Comprehension!
    print("This number is big!")

class RandomNumberHolder(object):
    # Create and hold 20 random numbers using numberizer

    def __init__(self):
        self.numbers = [numberizer(x) for x in range(20)]

random_numbers = RandomNumberHolder()
#9 List Comprehensions
>>>   items = [x for x in range(20)]
>>>   items
[0,   1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>>   [x for x in range(20) if x % 2]
[1,   3, 5, 7, 9, 11, 13, 15, 17, 19]


                    List Comprehensions are
                   wonderful syntactical sugar.
>>> # Fizzbuzz solved using Python's List Comprehension
>>> lst = [(x, 'Fizz', 'Buzz', 'FizzBuzz') 
...            [(not x % 3) | (not x % 5) << 1] for x in range(20)]

                                        Backslash can be used to
                                        break up long statements.
                                           Please use sparingly!
#10 Generators
>>> def countdown(n):
...     print("Counting down from {0}".format(n))
...     while n > 0:
...        yield n             A generator evaluates only when the
...        n -= 1              iterable is at that iteration. This is really
                               powerful, especially when working with
>>> x = countdown(10)          large iterables.
>>> x
<generator object at 0x58490>
>>> x.next()
Counting down from 10
10                                       A billion iterations for
>>> x.next()
9                                      a generator is NOTHING.
>>> x.next()
8
>>> x.next()
7

                      http://dabeaz.com/generators/Generators.pdf
#11 Generator Expressions
>>> items = (str(x) for x in xrange(10000))         Generator expressions are
>>> items
<generator object <genexpr> at 0x100721460>         shorthand for generators. Just
                                                    like list comprehensions, but
                                                    with () instead of [].




                    http://dabeaz.com/generators/Generators.pdf
#11 Generator Expressions
Problem: count the bytes saved to huge apache access log.
wwwlog = open("access-log")
total = 0                                    Open the whole file, then
for line in wwwlog:
    bytestr = line.rsplit(None,1)[1]        iterate through the results.
    if bytestr != '-':
        total += int(bytestr)
                                              Lots of memory usage!
print "Total", total


            # generator expressions way
Generator   wwwlog     = open("access-log")
            bytecolumn = (line.rsplit(None,1)[1] for line in wwwlog)
  way       bytes      = (int(x) for x in bytecolumn if x != '-')
            print "Total", sum(bytes)

                  http://dabeaz.com/generators/Generators.pdf
#12 Sets
>>> lst = [1,1,1,1,1,2,2,2,3,3,3,3,3,3]
>>> s = set(lst)
>>> s
set([1,2,3])

  Counting unique words in the Gettysburg Address
>>>   address = """Four score and seven years ago our fathers brought..."""
>>>   for r in [',','.','-']:
...       address = address.replace(r,'')
>>>
>>>
      words = address.split(' ')
      len(words)
                                        All items in a set need to
278
>>>   unique_words = set(words)
                                          be of the same type.
>>>   len(unique_words)
143
>>> data = {                       #13 Dictionaries
       'name':'Daniel Greenfeld',
       'nickname':'pydanny',
       'states_lived':['CA','KS','MD','NJ','VA','AD'],
       'fiancee':'Audrey Roy'
       }
>>> data['name']
'Daniel Greenfeld'
>>> data['nickname'] = 'audreyr'       Mutable Key/Value objects
>>> data['nickname']
'audreyr'
>>> data['nickname'] = 'pydanny'
>>> data.keys()
['fiancee', 'nickname', 'name', 'states_lived']
>>> data.get('fiancee')
'Audrey Roy'
>>> data.get('fiance')
None
>>> data.pop('fiancee')
'Audrey Roy'
>>> data
{'nickname': 'pydanny', 'name': 'Daniel Greenfeld', 'states_lived': ['CA',
'KS', 'MD', 'NJ', 'VA']}
>>> data['fiancee'] = 'Audrey Roy'
>>> data
{'fiancee': 'Audrey Roy', 'nickname': 'pydanny', 'name': 'Daniel
Greenfeld', 'states_lived': ['CA', 'KS', 'MD', 'NJ', 'VA', 'AD']}
#14 Object-Oriented Programming
class Animal(object):
    def __init__(self, name):
        self.name = name
    def talk(self):
        raise NotImplementedError("Subclass must implement abstract method")

class Cat(Animal):
    def talk(self):
        return 'Meow!'

class Dog(Animal):                                       Missy: Meow!
    def talk(self):
        return 'Woof! Woof!'                             Mr. Mistoffelees: Meow!
animals = [Cat('Missy'),                                 Lassie: Woof! Woof!
           Cat('Mr. Mistoffelees'),
           Dog('Lassie')]

for animal in animals:
    print animal.name + ': ' + animal.talk()


                      Barely scratching the surface!
           http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming#Examples
#15 Isolate Environments
$ curl http://bit.ly/get-pip | python
$ pip install virtualenv
$ virtualenv my_env
$ source my_env/bin/activate
(my_env) $
           Pro Tip: easy_install is legacy. Use pip.
(my_env) $ pip install django==1.3.1
(my_env) $ pip install requests==0.9.1
(my_env) $ pip install mongoengine==0.5.2
                                                     Warning!
(my_env) $ pip install celery==2.4.6               Only installs
(my_env) $ pip freeze
celery==2.4.6                                     Python drivers!
django==1.3.1
mongoengine==0.5.2                                Not MongoDB
requests==0.9.1
(my_env) $ pip freeze > requirements.txt           or RabbitMQ
...
(another_env) $ pip install -r requirements.txt
#16 Colorize Code
                How Github and Bitbucket do it
$ pip install pygments
from pygments import highlight
from pygments.lexers import get_lexer_by_name
from pygments.formatters import HtmlFormatter

if __name__ == '__main__':
    # get this file
                                                    pygments_demo.py
    code = open("pygments_demo.py", "rw").read()

   # figure out the lexer
   lexer = get_lexer_by_name("python", stripall=True)

   # construct the formatter
   formatter = HtmlFormatter(linenos=False, cssclass="source")

   # style and formatting
   css = HtmlFormatter().get_style_defs('.source')
   highlighted_code = highlight(code, lexer, formatter)
   page = """
                             $ python pygments_demo.py > text.html
       <html>
           <head><style>{css}</style></head>
           <body>{highlighted_code}</body>
       </html>
       """.format(css=css, highlighted_code=highlighted_code)
   print(page)
Output of the program

from pygments import highlight
from pygments.lexers import get_lexer_by_name
from pygments.formatters import HtmlFormatter       text.html
if __name__ == '__main__':
    # get this file
    code = open("pygments_demo.py", "rw").read()

   # figure out the lexer
   lexer = get_lexer_by_name("python", stripall=True)

   # construct the formatter
   formatter = HtmlFormatter(linenos=False, cssclass="source")

   # style and formatting
   css = HtmlFormatter().get_style_defs('.source')
   highlighted_code = highlight(code, lexer, formatter)
   page = """
       <html>
           <head><style>{css}</style></head>
           <body>{highlighted_code}</body>
       </html>
       """.format(css=css, highlighted_code=highlighted_code)
   print(page)
#17 Work with Relational Databases
(my_env)$ pip install django
 from datetime import datetime           Internationalization!
 from django.contrib.auth.models import User
 from django.db import models
 from django.utils.translation import ugettext_lazy as _

 class Post(models.Model):

     author = models.ForeignKey(User)
     title = models.CharField(_('Title'), max_length=100)
     content = models.TextField(_("Content"))
     pub_date = models.DateTimeField(_("Publication date"))

 class Comment(models.Model):
     post = models.ForeignKey(Post)
     name = models.CharField(_('Title'), max_length=100)
     content = models.TextField(_("Content"))
#18 Work with NoSQL
(my_env)$ pip install pymongo
>>> import pymongo
>>> connection = pymongo.Connection("localhost", 27017)
>>> db = connection.test
>>> db.name
u'test'
>>> db.my_collection
Collection(Database(Connection('localhost', 27017), u'test'),
u'my_collection')
>>> db.my_collection.save({"x": 10})
ObjectId('4aba15ebe23f6b53b0000000')
>>> db.my_collection.save({"x": 8})
ObjectId('4aba160ee23f6b543e000000')
>>> db.my_collection.save({"x": 11})
ObjectId('4aba160ee23f6b543e000002')
>>> db.my_collection.find_one()
{u'x': 10, u'_id': ObjectId('4aba15ebe23f6b53b0000000')}
>>> db.my_collection.create_index("x")
u'x_1'
>>> [item["x"] for item in db.my_collection.find().limit(2).skip(1)]
[8, 11]
#19 Message Queues
(my_env)$ pip install celery==2.4.6
(my_env)$ pip install requests==0.9.2
   import logging                                 products/tasks.py
   import requests
   from celery import task

   from products.models import Product
                                                  Decorators wrap a
   logger = logging.getLogger('products.tasks')
                                                  function or method
   @task
   def check_all_images():
                                                    with a function.
       for product in Product.objects.all():
           response = request.get(product.medium_image.url)
           if response.status_code != 200:
               msg = "Product {0} missing image".format(product.id)
               logging.warning(msg)
   >>> from products.tasks import confirm_all_images
   >>> result = confirm_all_images.delay()
   >>> result.ready()
   False
   >>> result.ready()
   True
#20 Work with JSON
>>> import json
>>> data = {
    'name':'Daniel Greenfeld',
    'nickname':'pydanny',
    'states_lived':['CA','KS','MD','NJ','VA','AD'],
    'fiancee':'Audrey Roy'
    }
>>> type(data)
<type 'dict'>
>>> payload = json.dumps(data)
>>> payload
'{"fiancee": "Audrey Roy", "nickname": "pydanny", "name": "Daniel
Greenfeld", "states_lived": ["CA", "KS", "MD", "NJ", "VA", "AD"]}'
>>> type(payload)
<type 'str'>
>>> restored = json.loads(payload)
>>> type(restored)
<type 'dict'>
>>> restored
{u'fiancee': u'Audrey Roy', u'nickname': u'pydanny', u'name': u'Daniel
Greenfeld', u'states_lived': [u'CA', u'KS', u'MD', u'NJ', u'VA', u'AD'
]}
#21 Serve the Web
 $ pip install flask==0.8
  # webapp.py
  from flask import Flask
  app = Flask(__name__)

  @app.route("/")
  def hello():
      return "Hello World!"

  if __name__ == "__main__":
      app.run()


      flask.pocoo.org
#21 Serve the Web




 Lots more frameworks!
#21 Serve the Web




  http://science.nasa.gov/
#21 Serve the Web




http://djangopackages.com
http://opencomparison.org
#21 Serve the Web




http://consumernotebook.com
#21 Serve the Web




    http://grove.io

     Hosted IRC
Finis
• Learn more at the following booths:
 • Python
 • Django
 • Pyladies
Questions?

More Related Content

What's hot

업적,칭호,타이틀 그게 뭐든간에...
업적,칭호,타이틀 그게 뭐든간에...업적,칭호,타이틀 그게 뭐든간에...
업적,칭호,타이틀 그게 뭐든간에...
SeungYeon Jeong
 
Monads do not Compose
Monads do not ComposeMonads do not Compose
Monads do not Compose
Philip Schwarz
 

What's hot (20)

Learn 90% of Python in 90 Minutes
Learn 90% of Python in 90 MinutesLearn 90% of Python in 90 Minutes
Learn 90% of Python in 90 Minutes
 
F strings
F stringsF strings
F strings
 
PythonOOP
PythonOOPPythonOOP
PythonOOP
 
Introduction to OOP in Python
Introduction to OOP in PythonIntroduction to OOP in Python
Introduction to OOP in Python
 
Introduction to Python
Introduction to Python Introduction to Python
Introduction to Python
 
Map, Filter and Reduce In Python
Map, Filter and Reduce In PythonMap, Filter and Reduce In Python
Map, Filter and Reduce In Python
 
Data Analysis with Python Pandas
Data Analysis with Python PandasData Analysis with Python Pandas
Data Analysis with Python Pandas
 
Computational complexity in python
Computational complexity in pythonComputational complexity in python
Computational complexity in python
 
外部環境への依存をテストする
外部環境への依存をテストする外部環境への依存をテストする
外部環境への依存をテストする
 
Tkinter Python Tutorial | Python GUI Programming Using Tkinter Tutorial | Pyt...
Tkinter Python Tutorial | Python GUI Programming Using Tkinter Tutorial | Pyt...Tkinter Python Tutorial | Python GUI Programming Using Tkinter Tutorial | Pyt...
Tkinter Python Tutorial | Python GUI Programming Using Tkinter Tutorial | Pyt...
 
Python: Migrating from Procedural to Object-Oriented Programming
Python: Migrating from Procedural to Object-Oriented ProgrammingPython: Migrating from Procedural to Object-Oriented Programming
Python: Migrating from Procedural to Object-Oriented Programming
 
Django interview Questions| Edureka
Django interview  Questions| EdurekaDjango interview  Questions| Edureka
Django interview Questions| Edureka
 
How to Pitch your Game to Business People
How to Pitch your Game to Business PeopleHow to Pitch your Game to Business People
How to Pitch your Game to Business People
 
Python Basics
Python BasicsPython Basics
Python Basics
 
Domain Modeling Made Functional (KanDDDinsky 2019)
Domain Modeling Made Functional (KanDDDinsky 2019)Domain Modeling Made Functional (KanDDDinsky 2019)
Domain Modeling Made Functional (KanDDDinsky 2019)
 
Modern C++ Explained: Move Semantics (Feb 2018)
Modern C++ Explained: Move Semantics (Feb 2018)Modern C++ Explained: Move Semantics (Feb 2018)
Modern C++ Explained: Move Semantics (Feb 2018)
 
Dry-validation update. Dry-validation vs Dry-schema 1.0 - Aleksandra Stolyar ...
Dry-validation update. Dry-validation vs Dry-schema 1.0 - Aleksandra Stolyar ...Dry-validation update. Dry-validation vs Dry-schema 1.0 - Aleksandra Stolyar ...
Dry-validation update. Dry-validation vs Dry-schema 1.0 - Aleksandra Stolyar ...
 
Python
PythonPython
Python
 
업적,칭호,타이틀 그게 뭐든간에...
업적,칭호,타이틀 그게 뭐든간에...업적,칭호,타이틀 그게 뭐든간에...
업적,칭호,타이틀 그게 뭐든간에...
 
Monads do not Compose
Monads do not ComposeMonads do not Compose
Monads do not Compose
 

Viewers also liked

Samarjit Kachari-New media:Hope for literature and language survival?
Samarjit Kachari-New media:Hope for literature and language survival?Samarjit Kachari-New media:Hope for literature and language survival?
Samarjit Kachari-New media:Hope for literature and language survival?
pumediaseminar2011
 
java programming basics - part ii
 java programming basics - part ii java programming basics - part ii
java programming basics - part ii
jyoti_lakhani
 

Viewers also liked (20)

Intro to Python Workshop San Diego, CA (January 19, 2013)
Intro to Python Workshop San Diego, CA (January 19, 2013)Intro to Python Workshop San Diego, CA (January 19, 2013)
Intro to Python Workshop San Diego, CA (January 19, 2013)
 
Intro to Python
Intro to PythonIntro to Python
Intro to Python
 
Welcome to Python
Welcome to PythonWelcome to Python
Welcome to Python
 
Health 2.0 pre ga slides day 1 & change management
Health 2.0 pre ga slides day 1 & change managementHealth 2.0 pre ga slides day 1 & change management
Health 2.0 pre ga slides day 1 & change management
 
Ctrc python
Ctrc pythonCtrc python
Ctrc python
 
Python
Python Python
Python
 
Samarjit Kachari-New media:Hope for literature and language survival?
Samarjit Kachari-New media:Hope for literature and language survival?Samarjit Kachari-New media:Hope for literature and language survival?
Samarjit Kachari-New media:Hope for literature and language survival?
 
Why Python?
Why Python?Why Python?
Why Python?
 
Intro
IntroIntro
Intro
 
Intro to Data Visualizations
Intro to Data VisualizationsIntro to Data Visualizations
Intro to Data Visualizations
 
PyCon Philippines 2012 Keynote
PyCon Philippines 2012 KeynotePyCon Philippines 2012 Keynote
PyCon Philippines 2012 Keynote
 
The One Way
The One WayThe One Way
The One Way
 
Python: The Programmer's Lingua Franca
Python: The Programmer's Lingua FrancaPython: The Programmer's Lingua Franca
Python: The Programmer's Lingua Franca
 
Lighting talk on django-social-auth
Lighting talk on django-social-authLighting talk on django-social-auth
Lighting talk on django-social-auth
 
Rapid Prototyping with Python
Rapid Prototyping with PythonRapid Prototyping with Python
Rapid Prototyping with Python
 
Introduction to Scratch Programming
Introduction to Scratch ProgrammingIntroduction to Scratch Programming
Introduction to Scratch Programming
 
Esri South Africa Python for Everyone
Esri South Africa Python for EveryoneEsri South Africa Python for Everyone
Esri South Africa Python for Everyone
 
From Prospect To Production In 30 Days
From Prospect To Production In 30 DaysFrom Prospect To Production In 30 Days
From Prospect To Production In 30 Days
 
java programming basics - part ii
 java programming basics - part ii java programming basics - part ii
java programming basics - part ii
 
Python Is Rad
Python Is RadPython Is Rad
Python Is Rad
 

Similar to Intro to Python

Python utan-stodhjul-motorsag
Python utan-stodhjul-motorsagPython utan-stodhjul-motorsag
Python utan-stodhjul-motorsag
niklal
 
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
 
PPT on Python - illustrating Python for BBA, B.Tech
PPT on Python - illustrating Python for BBA, B.TechPPT on Python - illustrating Python for BBA, B.Tech
PPT on Python - illustrating Python for BBA, B.Tech
ssuser2678ab
 
Python Interview Questions | Python Interview Questions And Answers | Python ...
Python Interview Questions | Python Interview Questions And Answers | Python ...Python Interview Questions | Python Interview Questions And Answers | Python ...
Python Interview Questions | Python Interview Questions And Answers | Python ...
Simplilearn
 
Migrating from matlab to python
Migrating from matlab to pythonMigrating from matlab to python
Migrating from matlab to python
ActiveState
 
Python bootcamp - C4Dlab, University of Nairobi
Python bootcamp - C4Dlab, University of NairobiPython bootcamp - C4Dlab, University of Nairobi
Python bootcamp - C4Dlab, University of Nairobi
krmboya
 
Sphinx autodoc - automated API documentation (PyCon APAC 2015 in Taiwan)
Sphinx autodoc - automated API documentation (PyCon APAC 2015 in Taiwan)Sphinx autodoc - automated API documentation (PyCon APAC 2015 in Taiwan)
Sphinx autodoc - automated API documentation (PyCon APAC 2015 in Taiwan)
Takayuki Shimizukawa
 

Similar to Intro to Python (20)

Python utan-stodhjul-motorsag
Python utan-stodhjul-motorsagPython utan-stodhjul-motorsag
Python utan-stodhjul-motorsag
 
Dynamic Python
Dynamic PythonDynamic Python
Dynamic 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...
 
PPT on Python - illustrating Python for BBA, B.Tech
PPT on Python - illustrating Python for BBA, B.TechPPT on Python - illustrating Python for BBA, B.Tech
PPT on Python - illustrating Python for BBA, B.Tech
 
Introduction to Python for Plone developers
Introduction to Python for Plone developersIntroduction to Python for Plone developers
Introduction to Python for Plone developers
 
Overview of Python - Bsides Detroit 2012
Overview of Python - Bsides Detroit 2012Overview of Python - Bsides Detroit 2012
Overview of Python - Bsides Detroit 2012
 
Python Tutorial
Python TutorialPython Tutorial
Python Tutorial
 
Python于Web 2.0网站的应用 - QCon Beijing 2010
Python于Web 2.0网站的应用 - QCon Beijing 2010Python于Web 2.0网站的应用 - QCon Beijing 2010
Python于Web 2.0网站的应用 - QCon Beijing 2010
 
Python Interview Questions | Python Interview Questions And Answers | Python ...
Python Interview Questions | Python Interview Questions And Answers | Python ...Python Interview Questions | Python Interview Questions And Answers | Python ...
Python Interview Questions | Python Interview Questions And Answers | Python ...
 
Python in 90 minutes
Python in 90 minutesPython in 90 minutes
Python in 90 minutes
 
Learn Python 3 for absolute beginners
Learn Python 3 for absolute beginnersLearn Python 3 for absolute beginners
Learn Python 3 for absolute beginners
 
Python in 30 minutes!
Python in 30 minutes!Python in 30 minutes!
Python in 30 minutes!
 
Becoming a Pythonist
Becoming a PythonistBecoming a Pythonist
Becoming a Pythonist
 
Python ppt
Python pptPython ppt
Python ppt
 
Sphinx autodoc - automated api documentation - PyCon.KR 2015
Sphinx autodoc - automated api documentation - PyCon.KR 2015Sphinx autodoc - automated api documentation - PyCon.KR 2015
Sphinx autodoc - automated api documentation - PyCon.KR 2015
 
Migrating from matlab to python
Migrating from matlab to pythonMigrating from matlab to python
Migrating from matlab to python
 
Python bootcamp - C4Dlab, University of Nairobi
Python bootcamp - C4Dlab, University of NairobiPython bootcamp - C4Dlab, University of Nairobi
Python bootcamp - C4Dlab, University of Nairobi
 
01-Python-Basics.ppt
01-Python-Basics.ppt01-Python-Basics.ppt
01-Python-Basics.ppt
 
Sphinx autodoc - automated api documentation - PyCon.MY 2015
Sphinx autodoc - automated api documentation - PyCon.MY 2015Sphinx autodoc - automated api documentation - PyCon.MY 2015
Sphinx autodoc - automated api documentation - PyCon.MY 2015
 
Sphinx autodoc - automated API documentation (PyCon APAC 2015 in Taiwan)
Sphinx autodoc - automated API documentation (PyCon APAC 2015 in Taiwan)Sphinx autodoc - automated API documentation (PyCon APAC 2015 in Taiwan)
Sphinx autodoc - automated API documentation (PyCon APAC 2015 in Taiwan)
 

More from Daniel Greenfeld

From NASA to Startups to Big Commerce
From NASA to Startups to Big CommerceFrom NASA to Startups to Big Commerce
From NASA to Startups to Big Commerce
Daniel Greenfeld
 

More from Daniel Greenfeld (19)

How to Write a Popular Python Library by Accident
How to Write a Popular Python Library by AccidentHow to Write a Popular Python Library by Accident
How to Write a Popular Python Library by Accident
 
10 more-things-you-can-do-with-python
10 more-things-you-can-do-with-python10 more-things-you-can-do-with-python
10 more-things-you-can-do-with-python
 
From NASA to Startups to Big Commerce
From NASA to Startups to Big CommerceFrom NASA to Startups to Big Commerce
From NASA to Startups to Big Commerce
 
Thinking hard about_python
Thinking hard about_pythonThinking hard about_python
Thinking hard about_python
 
An Extreme Talk about the Zen of Python
An Extreme Talk about the Zen of PythonAn Extreme Talk about the Zen of Python
An Extreme Talk about the Zen of Python
 
Round pegs and square holes
Round pegs and square holesRound pegs and square holes
Round pegs and square holes
 
Future of Collaboration
Future of CollaborationFuture of Collaboration
Future of Collaboration
 
Advanced Django Forms Usage
Advanced Django Forms UsageAdvanced Django Forms Usage
Advanced Django Forms Usage
 
Confessions of Joe Developer
Confessions of Joe DeveloperConfessions of Joe Developer
Confessions of Joe Developer
 
Python Worst Practices
Python Worst PracticesPython Worst Practices
Python Worst Practices
 
Django Worst Practices
Django Worst PracticesDjango Worst Practices
Django Worst Practices
 
How to sell django panel
How to sell django panelHow to sell django panel
How to sell django panel
 
Pinax Long Tutorial Slides
Pinax Long Tutorial SlidesPinax Long Tutorial Slides
Pinax Long Tutorial Slides
 
Testing In Django
Testing In DjangoTesting In Django
Testing In Django
 
Django Uni-Form
Django Uni-FormDjango Uni-Form
Django Uni-Form
 
Nova Django
Nova DjangoNova Django
Nova Django
 
Pinax Introduction
Pinax IntroductionPinax Introduction
Pinax Introduction
 
Why Django
Why DjangoWhy Django
Why Django
 
Pinax Tutorial 09/09/09
Pinax Tutorial 09/09/09Pinax Tutorial 09/09/09
Pinax Tutorial 09/09/09
 

Recently uploaded

Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider  Progress from Awareness to Implementation.pptxTales from a Passkey Provider  Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
FIDO Alliance
 
Microsoft BitLocker Bypass Attack Method.pdf
Microsoft BitLocker Bypass Attack Method.pdfMicrosoft BitLocker Bypass Attack Method.pdf
Microsoft BitLocker Bypass Attack Method.pdf
Overkill Security
 
“Iamnobody89757” Understanding the Mysterious of Digital Identity.pdf
“Iamnobody89757” Understanding the Mysterious of Digital Identity.pdf“Iamnobody89757” Understanding the Mysterious of Digital Identity.pdf
“Iamnobody89757” Understanding the Mysterious of Digital Identity.pdf
Muhammad Subhan
 

Recently uploaded (20)

Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider  Progress from Awareness to Implementation.pptxTales from a Passkey Provider  Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
 
Vector Search @ sw2con for slideshare.pptx
Vector Search @ sw2con for slideshare.pptxVector Search @ sw2con for slideshare.pptx
Vector Search @ sw2con for slideshare.pptx
 
Portal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russePortal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russe
 
JavaScript Usage Statistics 2024 - The Ultimate Guide
JavaScript Usage Statistics 2024 - The Ultimate GuideJavaScript Usage Statistics 2024 - The Ultimate Guide
JavaScript Usage Statistics 2024 - The Ultimate Guide
 
ChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps ProductivityChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps Productivity
 
Microsoft BitLocker Bypass Attack Method.pdf
Microsoft BitLocker Bypass Attack Method.pdfMicrosoft BitLocker Bypass Attack Method.pdf
Microsoft BitLocker Bypass Attack Method.pdf
 
AI mind or machine power point presentation
AI mind or machine power point presentationAI mind or machine power point presentation
AI mind or machine power point presentation
 
Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...
Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...
Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...
 
WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024
 
Design and Development of a Provenance Capture Platform for Data Science
Design and Development of a Provenance Capture Platform for Data ScienceDesign and Development of a Provenance Capture Platform for Data Science
Design and Development of a Provenance Capture Platform for Data Science
 
Event-Driven Architecture Masterclass: Challenges in Stream Processing
Event-Driven Architecture Masterclass: Challenges in Stream ProcessingEvent-Driven Architecture Masterclass: Challenges in Stream Processing
Event-Driven Architecture Masterclass: Challenges in Stream Processing
 
“Iamnobody89757” Understanding the Mysterious of Digital Identity.pdf
“Iamnobody89757” Understanding the Mysterious of Digital Identity.pdf“Iamnobody89757” Understanding the Mysterious of Digital Identity.pdf
“Iamnobody89757” Understanding the Mysterious of Digital Identity.pdf
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
JohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptxJohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptx
 
Top 10 CodeIgniter Development Companies
Top 10 CodeIgniter Development CompaniesTop 10 CodeIgniter Development Companies
Top 10 CodeIgniter Development Companies
 
AI in Action: Real World Use Cases by Anitaraj
AI in Action: Real World Use Cases by AnitarajAI in Action: Real World Use Cases by Anitaraj
AI in Action: Real World Use Cases by Anitaraj
 
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
 
Introduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDMIntroduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDM
 
Continuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
Continuing Bonds Through AI: A Hermeneutic Reflection on ThanabotsContinuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
Continuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
 
ERP Contender Series: Acumatica vs. Sage Intacct
ERP Contender Series: Acumatica vs. Sage IntacctERP Contender Series: Acumatica vs. Sage Intacct
ERP Contender Series: Acumatica vs. Sage Intacct
 

Intro to Python

  • 1. Intro to Python by Daniel Greenfeld
  • 2. Intro to Python a.k.a. 21 cool things you can do with Python
  • 3. Tons of content • Please hold your questions until the end • Latest slides will be made available • Special thanks to: • Raymond Hettinger • David Beazley • Audrey Roy • The Python community
  • 4. Daniel Greenfeld • pydanny • twitter.com/pydanny • github.com/pydanny • pydanny.blogspot.com • pydanny-event-notes.rtfd.org IMG goes here http://www.flickr.com/photos/pydanny/4442245488/
  • 5. Daniel Greenfeld • Python/Django Developer • Cartwheel Web • Makers of • Makers of Open Comparison • Los Angeles IMG goes here • Capoeira • Fiancee is Audrey Roy http://www.flickr.com/photos/pydanny/4442245488/
  • 7. Who uses Python? All the cool kids do!
  • 10. What is Python? • Over 20 years old • Dynamic, strongly typed scripting language • Multi-paradigm programming language • Object Oriented • Functional • Procedural • Reflective
  • 11. What is Python? • Free and open source • Fast enough • Check out PyPy • Batteries included language
  • 12. What is Python? http://en.wikipedia.org/wiki/File:Flyingcircus_2.jpg It’s named after Monty Python
  • 13. Python is similar to... • Perl • Ruby • Lisp • Java
  • 14. Python is different than... • Perl • Ruby • Lisp • Java
  • 16. Whitespace! """ whitespace.py """ from random import randrange def numberizer(): # Generate a random number from 1 to 10. return randrange(1, 11) number = numberizer() if number > 5: print("This number is big!") class RandomNumberHolder(object): # Create and hold 20 random numbers using numberizer def __init__(self): self.numbers = [numberizer(x) for x in range(20)] random_numbers = RandomNumberHolder()
  • 17. Whitespace! def numberizer(): # Generate a random number from 1 to 10. return randrange(1, 11)
  • 18. Whitespace! number = numberizer() if number > 5: print("This number is big!")
  • 19. Whitespace! class RandomNumberHolder(object): # Create and hold 20 random numbers # using numberizer def __init__(self): self.numbers = [numberizer(x) for x... random_numbers = RandomNumberHolder()
  • 20. Philosophy of Core Developers • Conservative growth • Aim for a simple implementation • “We read Knuth so you don’t have to”
  • 21. Zen of Python >>> import this The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those!
  • 22. Culture of Documentation • Django Web Framework • http://djangoproject.com • Document everything and document well • Make your documentation accessible • http://readthedocs.org • http://python-requests.org • http://bit.ly/oc_ref (Open Comparison reference)
  • 24. For learning and simple scripting... Use what is on your system by default. If you are running Linux or BSD you already have Python
  • 25. $ $ python Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53) [GCC 4.5.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> >>> 3 + 4 7 >>> a = 5 * 10 >>> a 50 >>> def add(a, b): ... return a + b ... >>> add(3,4) 7 >>> add('Py','thon') 'Python'
  • 26. Don’t have Python yet? Download 3.2 Unless you are working with a tool with a specific Python dependency (e.g. Django requires Python 2.7)
  • 27. 21 cool things you can do with Python
  • 28. #1 Run it anywhere Linux Windows FreeBSD Mac OS X JVM OpenBSD Solaris .NET NetBSD HP-UX Android OS BSD OS/2 http://en.wikipedia.org/wiki/CPython#Supported_platforms
  • 29. #2 Learn it fast Python is easy to learn but powerful. Experienced developers get up to speed in days. Lots of tutorials in the area taught by PyLadies. http://learnpythonthehardway.org/
  • 30. #3 Introspect a.k.a Introducing the String type >>> foo = 'bar' >>> spam = 'eggs' >>> fun = 'spam and EGGS ' dir() is a Python built-in function >>> dir(fun) ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', http://en.wikipedia.org/wiki/File:Flyingcircus_2.jpg '__rmul__', '__setattr__', '__sizeof__', '__str__','__subclasshook__', '_formatter_field_name_split', '_formatter_parser', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper','zfill']
  • 31. #3 Introspect a.k.a Introducing the String type >>> fun 'spam and EGGS ' >>> fun.strip() 'spam and EGGS' type() returns the type of object >>> spam.title() 'Spam And Eggs ' >>> fun.capitalize() 'Spam and eggs ' >>> fun.index('a') Line comments start with ‘# ‘ 2 >>> type(fun) <type 'str'> >>> len(fun) # built-in that gives length of object 16 >>> fun[0:5] # String slicing help() is a 'spam ' >>> help(fun) Python built-in no Python documentation found for 'spam and EGGS ' >>> help(str) str is the Python string type object
  • 32. #3 Introspect a.k.a Introducing the String type >>> help(str) Help on class str in module __builtin__: class str(basestring) | str(object) -> string | | Return a nice string representation of the object. | If the argument is a string, the return value is the same object. | | Method resolution order: | str | basestring | object | | Methods defined here: | | __add__(...) | x.__add__(y) <==> x+y | | __contains__(...) | x.__contains__(y) <==> y in x
  • 33. #3 Introspect a.k.a Introducing the String type >>> help(str) | capitalize(...) | S.capitalize() -> string | | Return a copy of the string S with only its first character | capitalized. | | center(...) | S.center(width[, fillchar]) -> string | | Return S centered in a string of length width. Padding is | done using the specified fill character (default is a space) | | count(...) | S.count(sub[, start[, end]]) -> int | | Return the number of non-overlapping occurrences of substring sub in | string S[start:end]. Optional arguments start and end are interpreted | as in slice notation.
  • 34. #4 Things with Strings >>> scale = 'Southern California Linux Expo' >>> scale[0] 'S' >>> scale[0:8] 'Southern' >>> scale[:-5] 'Southern California Linux' Strings are immutable >>> scale[0:8] = 'Northern' Traceback (most recent call last): File "<input>", line 1, in <module> TypeError: 'str' object does not support item assignment >>> scale.replace('Southern California','SoCal') 'SoCal Linux Expo' >>> scale 'Southern California Linux Expo' >>> scale = scale.replace('Southern California','SoCal') >>> scale 'SoCal Linux Expo' >>> scale.startswith('Windows') False >>> scale.endswith('Windows') False >>> scale.startswith('SoCal') True >>> 'Windows' in scale False >>> 'Linux' in scale True
  • 35. #5 String formatting >>> a = "Daniel" >>> b = "Adam" >>> c = "Greenfeld" >>> a + b + c 'DanielAdamGreenfeld' >>> "{0} {1} {2}".format(a, b, c) 'Daniel Adam Greenfeld' >>> "{first} {middle} {last}".format(first=a, middle=b, last=c) 'Daniel Adam Greenfeld' >>> lst = [a,b,c] >>> lst ['Daniel', 'Adam', 'Greenfeld'] >>> name =" ".join(lst) >>> name 'Daniel Adam Greenfeld'
  • 36. #6 Basic Operations >>> x, y, z = 5, 10, 15 >>> 5 < 10 True >>> 5 > 10 False Python has advanced math >>> True == False features that comes with False >>> (5 == x) or (10 == x) the standard library. True >>> (5 == x) and (10 == x) False >>> x + y - z 0 >>> 10 * 5 For scientific needs, 50 >>> 10 / 5 numpy is available. 2 >>> 10 + 5 15 >>> 10 ** 2 100
  • 37. #7 Lists >>> my_list = [1, 2, 3] >>> my_list.append(4) >>> my_list Lists are mutable [1, 2, 3, 4] >>> my_list.insert(2, 'dog') >>> my_list Tuples are not mutable [1, 2, 'dog', 3, 4] >>> my_list.extend([5, 6]) >>> my_list [1, 2, 'dog', 3, 4, 5, 6] >>> my_list.append([7, 8]) >>> my_list [1, 2, 'dog', 3, 4, 5, 6, [7, 8]] >>> my_list.pop(2) 'dog' >>> my_list [1, 2, 3, 4, 5, 6, [7, 8]] >>> my_list.reverse() >>> my_list [[7, 8], 6, 5, 4, 3, 2, 1]
  • 38. #8 Lists + Functional Programming >>> def divisible_by_2(x): ... return x % 2 == 0 ... >>> Filter constructs a list from >>> def cube(x): ... return x ** 3 those elements of an iterable ... for which the specified function >>> >>> numbers = [1, 2, 3, 4, 6, 31] returns True. >>> >>> filter(divisible_by_2, numbers) [2, 4, 6] >>> >>> map(cube, numbers) [1, 8, 27, 64, 216, 29791] Map applies the specified function to every item of the iterable and returns the results.
  • 39. #9 List Comprehensions Remember """ whitespace.py """ from random import randrange this def numberizer(): from the # Generate a random number from 1 to 10. return randrange(1, 11) beginning? number = numberizer() if number > 5: List Comprehension! print("This number is big!") class RandomNumberHolder(object): # Create and hold 20 random numbers using numberizer def __init__(self): self.numbers = [numberizer(x) for x in range(20)] random_numbers = RandomNumberHolder()
  • 40. #9 List Comprehensions >>> items = [x for x in range(20)] >>> items [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] >>> [x for x in range(20) if x % 2] [1, 3, 5, 7, 9, 11, 13, 15, 17, 19] List Comprehensions are wonderful syntactical sugar. >>> # Fizzbuzz solved using Python's List Comprehension >>> lst = [(x, 'Fizz', 'Buzz', 'FizzBuzz') ... [(not x % 3) | (not x % 5) << 1] for x in range(20)] Backslash can be used to break up long statements. Please use sparingly!
  • 41. #10 Generators >>> def countdown(n): ... print("Counting down from {0}".format(n)) ... while n > 0: ... yield n A generator evaluates only when the ... n -= 1 iterable is at that iteration. This is really powerful, especially when working with >>> x = countdown(10) large iterables. >>> x <generator object at 0x58490> >>> x.next() Counting down from 10 10 A billion iterations for >>> x.next() 9 a generator is NOTHING. >>> x.next() 8 >>> x.next() 7 http://dabeaz.com/generators/Generators.pdf
  • 42. #11 Generator Expressions >>> items = (str(x) for x in xrange(10000)) Generator expressions are >>> items <generator object <genexpr> at 0x100721460> shorthand for generators. Just like list comprehensions, but with () instead of []. http://dabeaz.com/generators/Generators.pdf
  • 43. #11 Generator Expressions Problem: count the bytes saved to huge apache access log. wwwlog = open("access-log") total = 0 Open the whole file, then for line in wwwlog: bytestr = line.rsplit(None,1)[1] iterate through the results. if bytestr != '-': total += int(bytestr) Lots of memory usage! print "Total", total # generator expressions way Generator wwwlog = open("access-log") bytecolumn = (line.rsplit(None,1)[1] for line in wwwlog) way bytes = (int(x) for x in bytecolumn if x != '-') print "Total", sum(bytes) http://dabeaz.com/generators/Generators.pdf
  • 44. #12 Sets >>> lst = [1,1,1,1,1,2,2,2,3,3,3,3,3,3] >>> s = set(lst) >>> s set([1,2,3]) Counting unique words in the Gettysburg Address >>> address = """Four score and seven years ago our fathers brought...""" >>> for r in [',','.','-']: ... address = address.replace(r,'') >>> >>> words = address.split(' ') len(words) All items in a set need to 278 >>> unique_words = set(words) be of the same type. >>> len(unique_words) 143
  • 45. >>> data = { #13 Dictionaries 'name':'Daniel Greenfeld', 'nickname':'pydanny', 'states_lived':['CA','KS','MD','NJ','VA','AD'], 'fiancee':'Audrey Roy' } >>> data['name'] 'Daniel Greenfeld' >>> data['nickname'] = 'audreyr' Mutable Key/Value objects >>> data['nickname'] 'audreyr' >>> data['nickname'] = 'pydanny' >>> data.keys() ['fiancee', 'nickname', 'name', 'states_lived'] >>> data.get('fiancee') 'Audrey Roy' >>> data.get('fiance') None >>> data.pop('fiancee') 'Audrey Roy' >>> data {'nickname': 'pydanny', 'name': 'Daniel Greenfeld', 'states_lived': ['CA', 'KS', 'MD', 'NJ', 'VA']} >>> data['fiancee'] = 'Audrey Roy' >>> data {'fiancee': 'Audrey Roy', 'nickname': 'pydanny', 'name': 'Daniel Greenfeld', 'states_lived': ['CA', 'KS', 'MD', 'NJ', 'VA', 'AD']}
  • 46. #14 Object-Oriented Programming class Animal(object): def __init__(self, name): self.name = name def talk(self): raise NotImplementedError("Subclass must implement abstract method") class Cat(Animal): def talk(self): return 'Meow!' class Dog(Animal): Missy: Meow! def talk(self): return 'Woof! Woof!' Mr. Mistoffelees: Meow! animals = [Cat('Missy'), Lassie: Woof! Woof! Cat('Mr. Mistoffelees'), Dog('Lassie')] for animal in animals: print animal.name + ': ' + animal.talk() Barely scratching the surface! http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming#Examples
  • 47. #15 Isolate Environments $ curl http://bit.ly/get-pip | python $ pip install virtualenv $ virtualenv my_env $ source my_env/bin/activate (my_env) $ Pro Tip: easy_install is legacy. Use pip. (my_env) $ pip install django==1.3.1 (my_env) $ pip install requests==0.9.1 (my_env) $ pip install mongoengine==0.5.2 Warning! (my_env) $ pip install celery==2.4.6 Only installs (my_env) $ pip freeze celery==2.4.6 Python drivers! django==1.3.1 mongoengine==0.5.2 Not MongoDB requests==0.9.1 (my_env) $ pip freeze > requirements.txt or RabbitMQ ... (another_env) $ pip install -r requirements.txt
  • 48. #16 Colorize Code How Github and Bitbucket do it $ pip install pygments from pygments import highlight from pygments.lexers import get_lexer_by_name from pygments.formatters import HtmlFormatter if __name__ == '__main__': # get this file pygments_demo.py code = open("pygments_demo.py", "rw").read() # figure out the lexer lexer = get_lexer_by_name("python", stripall=True) # construct the formatter formatter = HtmlFormatter(linenos=False, cssclass="source") # style and formatting css = HtmlFormatter().get_style_defs('.source') highlighted_code = highlight(code, lexer, formatter) page = """ $ python pygments_demo.py > text.html <html> <head><style>{css}</style></head> <body>{highlighted_code}</body> </html> """.format(css=css, highlighted_code=highlighted_code) print(page)
  • 49. Output of the program from pygments import highlight from pygments.lexers import get_lexer_by_name from pygments.formatters import HtmlFormatter text.html if __name__ == '__main__': # get this file code = open("pygments_demo.py", "rw").read() # figure out the lexer lexer = get_lexer_by_name("python", stripall=True) # construct the formatter formatter = HtmlFormatter(linenos=False, cssclass="source") # style and formatting css = HtmlFormatter().get_style_defs('.source') highlighted_code = highlight(code, lexer, formatter) page = """ <html> <head><style>{css}</style></head> <body>{highlighted_code}</body> </html> """.format(css=css, highlighted_code=highlighted_code) print(page)
  • 50. #17 Work with Relational Databases (my_env)$ pip install django from datetime import datetime Internationalization! from django.contrib.auth.models import User from django.db import models from django.utils.translation import ugettext_lazy as _ class Post(models.Model): author = models.ForeignKey(User) title = models.CharField(_('Title'), max_length=100) content = models.TextField(_("Content")) pub_date = models.DateTimeField(_("Publication date")) class Comment(models.Model): post = models.ForeignKey(Post) name = models.CharField(_('Title'), max_length=100) content = models.TextField(_("Content"))
  • 51. #18 Work with NoSQL (my_env)$ pip install pymongo >>> import pymongo >>> connection = pymongo.Connection("localhost", 27017) >>> db = connection.test >>> db.name u'test' >>> db.my_collection Collection(Database(Connection('localhost', 27017), u'test'), u'my_collection') >>> db.my_collection.save({"x": 10}) ObjectId('4aba15ebe23f6b53b0000000') >>> db.my_collection.save({"x": 8}) ObjectId('4aba160ee23f6b543e000000') >>> db.my_collection.save({"x": 11}) ObjectId('4aba160ee23f6b543e000002') >>> db.my_collection.find_one() {u'x': 10, u'_id': ObjectId('4aba15ebe23f6b53b0000000')} >>> db.my_collection.create_index("x") u'x_1' >>> [item["x"] for item in db.my_collection.find().limit(2).skip(1)] [8, 11]
  • 52. #19 Message Queues (my_env)$ pip install celery==2.4.6 (my_env)$ pip install requests==0.9.2 import logging products/tasks.py import requests from celery import task from products.models import Product Decorators wrap a logger = logging.getLogger('products.tasks') function or method @task def check_all_images(): with a function. for product in Product.objects.all(): response = request.get(product.medium_image.url) if response.status_code != 200: msg = "Product {0} missing image".format(product.id) logging.warning(msg) >>> from products.tasks import confirm_all_images >>> result = confirm_all_images.delay() >>> result.ready() False >>> result.ready() True
  • 53. #20 Work with JSON >>> import json >>> data = { 'name':'Daniel Greenfeld', 'nickname':'pydanny', 'states_lived':['CA','KS','MD','NJ','VA','AD'], 'fiancee':'Audrey Roy' } >>> type(data) <type 'dict'> >>> payload = json.dumps(data) >>> payload '{"fiancee": "Audrey Roy", "nickname": "pydanny", "name": "Daniel Greenfeld", "states_lived": ["CA", "KS", "MD", "NJ", "VA", "AD"]}' >>> type(payload) <type 'str'> >>> restored = json.loads(payload) >>> type(restored) <type 'dict'> >>> restored {u'fiancee': u'Audrey Roy', u'nickname': u'pydanny', u'name': u'Daniel Greenfeld', u'states_lived': [u'CA', u'KS', u'MD', u'NJ', u'VA', u'AD' ]}
  • 54. #21 Serve the Web $ pip install flask==0.8 # webapp.py from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": app.run() flask.pocoo.org
  • 55. #21 Serve the Web Lots more frameworks!
  • 56. #21 Serve the Web http://science.nasa.gov/
  • 57. #21 Serve the Web http://djangopackages.com http://opencomparison.org
  • 58. #21 Serve the Web http://consumernotebook.com
  • 59. #21 Serve the Web http://grove.io Hosted IRC
  • 60. Finis • Learn more at the following booths: • Python • Django • Pyladies