SlideShare uma empresa Scribd logo
1 de 61
Baixar para ler 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:           http://slidesha.re/intro-to-python

• Special thanks to:          http://bit.ly/x610Au
   • 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?

Mais conteúdo relacionado

Mais procurados

How to train your python: iterables (FR)
How to train your python: iterables (FR)How to train your python: iterables (FR)
How to train your python: iterables (FR)Jordi Riera
 
Implementasi Full Textsearch pada Database
Implementasi Full Textsearch pada DatabaseImplementasi Full Textsearch pada Database
Implementasi Full Textsearch pada DatabaseDony Riyanto
 
Intro to Google Docs
Intro to Google DocsIntro to Google Docs
Intro to Google DocsJohn Dorner
 
Introduction to Python for new beginner
Introduction to Python for new beginnerIntroduction to Python for new beginner
Introduction to Python for new beginnerBurasakorn Sabyeying
 
Making Magic with F# Type Providers
Making Magic with F# Type ProvidersMaking Magic with F# Type Providers
Making Magic with F# Type Providersdsyme
 

Mais procurados (6)

How to train your python: iterables (FR)
How to train your python: iterables (FR)How to train your python: iterables (FR)
How to train your python: iterables (FR)
 
Implementasi Full Textsearch pada Database
Implementasi Full Textsearch pada DatabaseImplementasi Full Textsearch pada Database
Implementasi Full Textsearch pada Database
 
Python pandas Library
Python pandas LibraryPython pandas Library
Python pandas Library
 
Intro to Google Docs
Intro to Google DocsIntro to Google Docs
Intro to Google Docs
 
Introduction to Python for new beginner
Introduction to Python for new beginnerIntroduction to Python for new beginner
Introduction to Python for new beginner
 
Making Magic with F# Type Providers
Making Magic with F# Type ProvidersMaking Magic with F# Type Providers
Making Magic with F# Type Providers
 

Destaque

PyCon Philippines 2012 Keynote
PyCon Philippines 2012 KeynotePyCon Philippines 2012 Keynote
PyCon Philippines 2012 KeynoteDaniel Greenfeld
 
Intro to Data Visualizations
Intro to Data VisualizationsIntro to Data Visualizations
Intro to Data VisualizationsDaniel Greenfeld
 
Lighting talk on django-social-auth
Lighting talk on django-social-authLighting talk on django-social-auth
Lighting talk on django-social-authDaniel Greenfeld
 
Round pegs and square holes
Round pegs and square holesRound pegs and square holes
Round pegs and square holesDaniel Greenfeld
 
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 PythonDaniel Greenfeld
 
Python Programming Essentials - M34 - List Comprehensions
Python Programming Essentials - M34 - List ComprehensionsPython Programming Essentials - M34 - List Comprehensions
Python Programming Essentials - M34 - List ComprehensionsP3 InfoTech Solutions Pvt. Ltd.
 
Python Programming Essentials - M44 - Overview of Web Development
Python Programming Essentials - M44 - Overview of Web DevelopmentPython Programming Essentials - M44 - Overview of Web Development
Python Programming Essentials - M44 - Overview of Web DevelopmentP3 InfoTech Solutions Pvt. Ltd.
 
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 AccidentDaniel Greenfeld
 
Thinking hard about_python
Thinking hard about_pythonThinking hard about_python
Thinking hard about_pythonDaniel 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 CommerceDaniel Greenfeld
 

Destaque (13)

The One Way
The One WayThe One Way
The One Way
 
PyCon Philippines 2012 Keynote
PyCon Philippines 2012 KeynotePyCon Philippines 2012 Keynote
PyCon Philippines 2012 Keynote
 
Intro to Data Visualizations
Intro to Data VisualizationsIntro to Data Visualizations
Intro to Data Visualizations
 
Lighting talk on django-social-auth
Lighting talk on django-social-authLighting talk on django-social-auth
Lighting talk on django-social-auth
 
Round pegs and square holes
Round pegs and square holesRound pegs and square holes
Round pegs and square holes
 
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
 
Python Programming Essentials - M34 - List Comprehensions
Python Programming Essentials - M34 - List ComprehensionsPython Programming Essentials - M34 - List Comprehensions
Python Programming Essentials - M34 - List Comprehensions
 
Python Programming Essentials - M44 - Overview of Web Development
Python Programming Essentials - M44 - Overview of Web DevelopmentPython Programming Essentials - M44 - Overview of Web Development
Python Programming Essentials - M44 - Overview of Web Development
 
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
 
Thinking hard about_python
Thinking hard about_pythonThinking hard about_python
Thinking hard about_python
 
Intro to Python
Intro to PythonIntro to Python
Intro to 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
 
Python Worst Practices
Python Worst PracticesPython Worst Practices
Python Worst Practices
 

Semelhante a Intro

Python utan-stodhjul-motorsag
Python utan-stodhjul-motorsagPython utan-stodhjul-motorsag
Python utan-stodhjul-motorsagniklal
 
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 2010Qiangning Hong
 
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.Techssuser2678ab
 
Overview of Python - Bsides Detroit 2012
Overview of Python - Bsides Detroit 2012Overview of Python - Bsides Detroit 2012
Overview of Python - Bsides Detroit 2012Tazdrumm3r
 
2015 bioinformatics python_io_wim_vancriekinge
2015 bioinformatics python_io_wim_vancriekinge2015 bioinformatics python_io_wim_vancriekinge
2015 bioinformatics python_io_wim_vancriekingeProf. Wim Van Criekinge
 
Learn Python 3 for absolute beginners
Learn Python 3 for absolute beginnersLearn Python 3 for absolute beginners
Learn Python 3 for absolute beginnersKingsleyAmankwa
 
Python in 30 minutes!
Python in 30 minutes!Python in 30 minutes!
Python in 30 minutes!Fariz Darari
 
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
 
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 2015Takayuki Shimizukawa
 
Becoming a Pythonist
Becoming a PythonistBecoming a Pythonist
Becoming a PythonistRaji Engg
 
Introduction to Python for Plone developers
Introduction to Python for Plone developersIntroduction to Python for Plone developers
Introduction to Python for Plone developersJim Roepcke
 
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 2015Takayuki Shimizukawa
 
Python and Oracle : allies for best of data management
Python and Oracle : allies for best of data managementPython and Oracle : allies for best of data management
Python and Oracle : allies for best of data managementLaurent Leturgez
 
I don't know what I'm Doing: A newbie guide for Golang for DevOps
I don't know what I'm Doing: A newbie guide for Golang for DevOpsI don't know what I'm Doing: A newbie guide for Golang for DevOps
I don't know what I'm Doing: A newbie guide for Golang for DevOpsPeter Souter
 
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
 

Semelhante a Intro (20)

Python utan-stodhjul-motorsag
Python utan-stodhjul-motorsagPython utan-stodhjul-motorsag
Python utan-stodhjul-motorsag
 
Dynamic Python
Dynamic PythonDynamic Python
Dynamic Python
 
Python in 90 minutes
Python in 90 minutesPython in 90 minutes
Python in 90 minutes
 
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
 
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
 
Overview of Python - Bsides Detroit 2012
Overview of Python - Bsides Detroit 2012Overview of Python - Bsides Detroit 2012
Overview of Python - Bsides Detroit 2012
 
2015 bioinformatics python_io_wim_vancriekinge
2015 bioinformatics python_io_wim_vancriekinge2015 bioinformatics python_io_wim_vancriekinge
2015 bioinformatics python_io_wim_vancriekinge
 
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!
 
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)
 
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
 
Becoming a Pythonist
Becoming a PythonistBecoming a Pythonist
Becoming a Pythonist
 
Introduction to Python for Plone developers
Introduction to Python for Plone developersIntroduction to Python for Plone developers
Introduction to Python for Plone developers
 
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
 
Intro to Python
Intro to PythonIntro to Python
Intro to Python
 
Python ppt
Python pptPython ppt
Python ppt
 
Python and Oracle : allies for best of data management
Python and Oracle : allies for best of data managementPython and Oracle : allies for best of data management
Python and Oracle : allies for best of data management
 
I don't know what I'm Doing: A newbie guide for Golang for DevOps
I don't know what I'm Doing: A newbie guide for Golang for DevOpsI don't know what I'm Doing: A newbie guide for Golang for DevOps
I don't know what I'm Doing: A newbie guide for Golang for DevOps
 
Python Tutorial
Python TutorialPython Tutorial
Python Tutorial
 
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...
 

Mais de Daniel Greenfeld

Mais de Daniel Greenfeld (12)

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
 
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
 

Último

Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 

Último (20)

Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 

Intro

  • 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: http://slidesha.re/intro-to-python • Special thanks to: http://bit.ly/x610Au • 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