Skip to content

Instantly share code, notes, and snippets.

@catherinedevlin
Last active December 22, 2015 23:19
Show Gist options
  • Save catherinedevlin/6545752 to your computer and use it in GitHub Desktop.
Save catherinedevlin/6545752 to your computer and use it in GitHub Desktop.
Python presentation at APCUG 2013 Regional conference: http://rleevanceapcug.wix.com/apcug-2013-regional
{
"metadata": {
"name": ""
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "heading",
"level": 1,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Python"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"![Python logo](files/python-logo-master.png)\n",
"\n",
" Catherine Devlin\n",
" APCUG 2013 Regional Conference\n",
" Sep 15, 2013\n",
" http://tinyurl.com/apcug-2013-python-intro"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"A buzzword-enhanced language\n",
"============================\n",
"\n",
"* Open-source\n",
"* Multi-purpose\n",
"* Multi-platform\n",
"* Dynamic\n",
"* Object-oriented\n",
"* Highly readable"
]
},
{
"cell_type": "heading",
"level": 1,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"What's it look like?"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"target_letter = \"r\"\n",
"for animal in [\"horse\", \"cat\", \"racoon\", \"duck\"]:\n",
" if target_letter in animal:\n",
" print(animal + \" contains the letter \" + target_letter)\n",
" else:\n",
" print(\"sorry, no \" + target_letter + \" in \" + animal)"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"horse contains the letter r\n",
"sorry, no r in cat\n",
"racoon contains the letter r\n",
"sorry, no r in duck\n"
]
}
],
"prompt_number": 11
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Familiar terms\n",
"--------------\n",
"\n",
"`for`, `if`, `else`, etc."
]
},
{
"cell_type": "heading",
"level": 1,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Dynamic"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def lots_of(x):\n",
" return 3 * x\n",
"\n",
"stuff = \"milk \"\n",
"print(type(stuff))\n",
"print(lots_of(stuff))\n",
"stuff = 3\n",
"print(type(stuff))\n",
"print(lots_of(stuff))"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"<class 'str'>\n",
"milk milk milk \n",
"<class 'int'>\n",
"9\n"
]
}
],
"prompt_number": 43
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import datetime\n",
"\n",
"print(lots_of(datetime.datetime.now()))"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"ename": "TypeError",
"evalue": "unsupported operand type(s) for *: 'int' and 'datetime.datetime'",
"output_type": "pyerr",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-38-61e691416648>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mdatetime\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlots_of\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdatetime\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdatetime\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnow\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;32m<ipython-input-37-3b437fd333c5>\u001b[0m in \u001b[0;36mlots_of\u001b[1;34m(x)\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mlots_of\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[1;36m3\u001b[0m \u001b[1;33m*\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlots_of\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"milk\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlots_of\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m3\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mTypeError\u001b[0m: unsupported operand type(s) for *: 'int' and 'datetime.datetime'"
]
}
],
"prompt_number": 38
},
{
"cell_type": "heading",
"level": 2,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Significant whitespace"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"target_letter = \"r\"\n",
"for animal in [\"horse\", \"cat\", \"racoon\", \"duck\"]:\n",
" if target_letter in animal:\n",
" print(animal + \" contains the letter \" + target_letter)\n",
" else:\n",
" print(\"sorry, no \" + target_letter + \" in \" + animal)"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"horse contains the letter r\n",
"sorry, no r in cat\n",
"racoon contains the letter r\n",
"sorry, no r in duck\n"
]
}
],
"prompt_number": 12
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- No line endings (a line ending *is* a line ending)\n",
"- Indentation marks blocks\n",
"- Python interpreter == your eyeball!"
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Highly readable"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"target_letter = \"r\"\n",
"for animal in [\"horse\", \"cat\", \"racoon\", \"duck\"]:\n",
" if target_letter in animal:\n",
" print(animal + \" contains the letter \" + target_letter)\n",
" else:\n",
" print(\"sorry, no \" + target_letter + \" in \" + animal)"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"horse contains the letter r\n",
"sorry, no r in cat\n",
"racoon contains the letter r\n",
"sorry, no r in duck\n"
]
}
],
"prompt_number": 1
},
{
"cell_type": "heading",
"level": 2,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Object-oriented"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"animal = \"moose\"\n",
"animal.upper()"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 13,
"text": [
"'MOOSE'"
]
}
],
"prompt_number": 13
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"class Animal(object):\n",
" def eat(self, food):\n",
" return \"What yummy \" + food + \"!\"\n",
" \n",
"fido = Animal()\n",
"fido.eat('dog food')"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 3,
"text": [
"'What yummy dog food!'"
]
}
],
"prompt_number": 3
},
{
"cell_type": "heading",
"level": 2,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Inheritence"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"class Cat(Animal):\n",
" def purr(self):\n",
" return 'rrrrrrrrrrrrrrrr'\n",
"\n",
"agamemnon = Cat()\n",
"agamemnon.eat('hotdish')"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 4,
"text": [
"'What yummy hotdish!'"
]
}
],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"agamemnon.purr()"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 5,
"text": [
"'rrrrrrrrrrrrrrrr'"
]
}
],
"prompt_number": 5
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"fido.purr()"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"ename": "AttributeError",
"evalue": "'Animal' object has no attribute 'purr'",
"output_type": "pyerr",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-6-32f565adf250>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mfido\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpurr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mAttributeError\u001b[0m: 'Animal' object has no attribute 'purr'"
]
}
],
"prompt_number": 6
},
{
"cell_type": "heading",
"level": 1,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Introspection"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"help(\"x\".upper)"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Help on built-in function upper:\n",
"\n",
"upper(...)\n",
" S.upper() -> str\n",
" \n",
" Return a copy of S converted to uppercase.\n",
"\n"
]
}
],
"prompt_number": 29
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"dir(\"x\")"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 30,
"text": [
"['__add__',\n",
" '__class__',\n",
" '__contains__',\n",
" '__delattr__',\n",
" '__dir__',\n",
" '__doc__',\n",
" '__eq__',\n",
" '__format__',\n",
" '__ge__',\n",
" '__getattribute__',\n",
" '__getitem__',\n",
" '__getnewargs__',\n",
" '__gt__',\n",
" '__hash__',\n",
" '__init__',\n",
" '__iter__',\n",
" '__le__',\n",
" '__len__',\n",
" '__lt__',\n",
" '__mod__',\n",
" '__mul__',\n",
" '__ne__',\n",
" '__new__',\n",
" '__reduce__',\n",
" '__reduce_ex__',\n",
" '__repr__',\n",
" '__rmod__',\n",
" '__rmul__',\n",
" '__setattr__',\n",
" '__sizeof__',\n",
" '__str__',\n",
" '__subclasshook__',\n",
" 'capitalize',\n",
" 'casefold',\n",
" 'center',\n",
" 'count',\n",
" 'encode',\n",
" 'endswith',\n",
" 'expandtabs',\n",
" 'find',\n",
" 'format',\n",
" 'format_map',\n",
" 'index',\n",
" 'isalnum',\n",
" 'isalpha',\n",
" 'isdecimal',\n",
" 'isdigit',\n",
" 'isidentifier',\n",
" 'islower',\n",
" 'isnumeric',\n",
" 'isprintable',\n",
" 'isspace',\n",
" 'istitle',\n",
" 'isupper',\n",
" 'join',\n",
" 'ljust',\n",
" 'lower',\n",
" 'lstrip',\n",
" 'maketrans',\n",
" 'partition',\n",
" 'replace',\n",
" 'rfind',\n",
" 'rindex',\n",
" 'rjust',\n",
" 'rpartition',\n",
" 'rsplit',\n",
" 'rstrip',\n",
" 'split',\n",
" 'splitlines',\n",
" 'startswith',\n",
" 'strip',\n",
" 'swapcase',\n",
" 'title',\n",
" 'translate',\n",
" 'upper',\n",
" 'zfill']"
]
}
],
"prompt_number": 30
},
{
"cell_type": "heading",
"level": 2,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Handy collections: lists"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"hotdish_ingredients = [\"noodles\", \"tuna\", \"mayo\", \"celery\"]\n",
"shopping_list = [\"apple\", \"bread\", hotdish_ingredients, \"spinach\"]\n",
"\n",
"for buy_me in shopping_list:\n",
" print(buy_me)"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"apple\n",
"bread\n",
"['noodles', 'tuna', 'mayo', 'celery']\n",
"spinach\n"
]
}
],
"prompt_number": 32
},
{
"cell_type": "heading",
"level": 2,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Handy collections (2): dictionaries"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"german = {\"cat\": \"Katze\", dog: \"Hund\"}\n",
"german[\"cat\"]"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 34,
"text": [
"'Katze'"
]
}
],
"prompt_number": 34
},
{
"cell_type": "heading",
"level": 2,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"list comprehension"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"name = \"American of Personal Computer User Groups\"\n",
"initials = [letter for letter in name if letter.isupper()]\n",
"print(initials)\n",
"abbrev = \"\".join(initials)\n",
"print(abbrev)"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"['A', 'P', 'C', 'U', 'G']\n",
"APCUG\n"
]
}
],
"prompt_number": 3
},
{
"cell_type": "heading",
"level": 2,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Rich standard library"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- formats: `csv`, `json`, `xml.*`...\n",
"- compression: `zlib`, `zipfile`, `tarfile`, `bz2`...\n",
"- datastores: `dbm`, `shelve`, `pickle`...\n",
"- network: `ftplib`, `urllib2`, `smtp`, `SimpleHTTPServer`...\n",
"- cryptography: `hashlib`\n",
"- user interfaces: `cmd`, `curses`..."
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"PyPI (the Cheese Shop)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"http://pypi.python.org\n",
"\n",
"34,000 + freely available modules"
]
},
{
"cell_type": "heading",
"level": 1,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Libraries make tasks easy"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import requests\n",
"\n",
"response = requests.get('http://dma1.org')\n",
"response.status_code"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 4,
"text": [
"200"
]
}
],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"response.content[:100]"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 5,
"text": [
"b'<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\\n<HTML>\\n<HEAD>\\n <LINK REL=\"SHORTCUT '"
]
}
],
"prompt_number": 5
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import re\n",
"re.search(\">(APCUG.*?)<\", str(response.content)).group(1)"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 15,
"text": [
"'APCUG 2013 Regional Computer Conference'"
]
}
],
"prompt_number": 15
},
{
"cell_type": "heading",
"level": 1,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"What's it used for?"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- web development\n",
"- scientific programming\n",
"- data analysis\n",
"- GUI tools\n",
"- systems administration\n",
"- games"
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Education"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- Youth: \"Python for Kids\" books, classes\n",
"- College: MIT\n",
"- Professionals: Universal \"pidgin\"\n"
]
},
{
"cell_type": "heading",
"level": 1,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"How's it used?"
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"Socially!"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- Developed by distributed groups\n",
"- Code submitted to PyPI\n",
"- PyCon, PyOhio..."
]
},
{
"cell_type": "heading",
"level": 1,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"How to learn it"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- https://wiki.python.org/moin/BeginnersGuide\n",
"- http://docs.python-guide.org\n",
"- http://learnpython.org\n",
"- Coursera\n",
"- PyOhio\n",
"- [Python Workshop for Women](http://tinyurl.com/cmh-py-workshop)\n",
"- catherine.devlin@gmail.com\n",
"- tinyurl.com/apcug-2013-python-intro"
]
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment