Python utan-stodhjul-motorsag
-
Upload
niklal -
Category
Technology
-
view
609 -
download
0
Transcript of Python utan-stodhjul-motorsag
Utan stödhjul och motorsåg
Vad är Python?
● Ett dynamiskt typat språk● Designat för enkelhet och tydlighet
It is the only language co-designed for the most advanced and the complete novice.
[David Goodger]
Plattformar
● Python = CPython● Jython (JVM)● IronPython (.NET, Mono)● PyPy (Python in Python)
Användningsområden
admin, byggen och driftsättning
webbapps, webbtjänster/+klienter
verktygsklister & GUIn (vanligt på linux)
dataskyffling/-konvertering/-analys
Scripta verktyg
Grafik (Gimp, Inkscape, Blender, ...), LibreOffice, ...
Spel (Battlefield 2+, Civ IV, EVE-Online, ...)
DVCS: Mercurial, Bazaar...
Användare
.. Sun, Microsoft, Canonical, O'Reilly, Lucasfilm, Nasa, Sourceforge, ...
Årets språk enligt Tiobe
Bästa tillväxten
20072010
Moget
Utveckling & drift: doctest, nosetests, distribute, pip, virtualenv, ...
Paket för allt: data, sysadmin, webb, grafik, matematik, parallellism...
Design
Vad är viktigt?
Läsbarhet!
Namngivning!
Programming The Way Guido Indented It
def to_roman(num):
assert num > 0 and num < 4000
result = []
for d, r in NUMERALS:
while num >= d: result.append(r) num -= d
return ''.join(result)
"In soviet russia, braces scope you"
from __future__ import braces
...SyntaxError: not a chance
Effektivt
tokens = ['a', 'b', 'c', 'B', 'dd', 'C', 'DD']
similar = {}
for token in tokens: key = token.lower() similar.setdefault(key, []).append(token)
Lättanvänt
for key, tokens in similar.items():
if len(tokens) > 1: print("Similar (like %s):" % key)
for token in tokens: print(token)
Generella behållare
● list() == []● dict() == {}● tuple() == ()● set()
Python är interaktivt
$ pythonPython 2.7.1 [...]Type "help", "copyright", "credits" or "license" for more information.>>>
>>> def add(a, b=1):... return a + b...>>> add(1)2>>> add(1, 2)3>>> add(2, b=3)5>>> add(b=3, a=2)5
Mekanik
"""Usage:
>>> usr = Path('/usr') >>> bin = usr.segment('local').segment('bin') >>> str(bin) '/usr/local/bin'"""
class Path: def __init__(self, base): self.base = base
def segment(self, name): return Path(self.base + '/' + name)
def __str__(self): return self.base
__protokoll__
Betyder används under ytan
Tydliga sammanhang
Börjar bukta när en dålig idé växer
● state är explicit (self)
"""Usage:
>>> usr = Path('/usr') >>> bin = usr.segment('local').segment('bin') >>> str(bin) '/usr/local/bin'"""
class Path(str): def segment(self, name): return Path(self + '/' + name)
Allt är objekt
● primitiver● collections● funktioner, klasser● moduler, paket
Ingen motorsåg..
Closures"""Usage:
>>> mkpasswd = salter("@secret#salt") >>> mkpasswd("qwerty") '4ef6056fb6f424f2e848705fd5e40602'"""
from hashlib import md5
def salter(salt):
def salted_encrypt(value): return md5(salt + value).hexdigest()
return salted_encrypt
Funktionell @dekoration
from django.views.decorators.cache import cache_page
@cache_page(15 * 60)def slashdot_index(request): result = resource_intensive_operation(request) return view_for(result)
Reduce boilerplate..
try: f = open('file1.txt') for line in f: print(line)
finally: f.close()
.. with contexts
with open('file1.txt') as f:
for line in f: print(line)
Generators
def public_files(dirname): for fname in os.listdir(dirname): if not fname.startswith('.'): yield fname
for fname in public_files('.'): open(fname)
Projicera data
Maskinellt procedurell
publicfiles = []
for fname in os.listdir('.'):
if not fname.startswith('.'): publicfiles.append(open(fname))
Tillståndslös spaghetti
publicfiles = map(lambda fname: open(fname), filter(lambda fname: not fname.startswith('.'), os.listdir('.')))
List comprehensions
publicfiles = [open(fname) for fname in os.listdir('.') if not fname.startswith('.')]
Generator comprehensions
publicfiles = (open(fname) for fname in os.listdir('.') if not fname.startswith('.'))
process(open(fname) for fname in os.listdir('.') if not fname.startswith('.'))
Myter
"My way or the highway"
Sanningar
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.
Python is humanism
Python ger dig
● Enkel men kraftfull kod● Fokus på lösningen
Tack!
Image Tributes (CC)
Python, Google, YouTube, Spotify logos & Amazon Python Day Poster photo courtesy of respective organization.
Night train
"And so thy path shall be a track of light"
"Documents Reveal Django Pony, Caught In Tail Of Lies." / _why
"inch by inch"
"Wasserglas"
"I am Jack, hear me lumber!"
"Bend me, Shape me, any way you want me."