90% of python in 90 minutes

s1mba發表於2014-11-09


注:本文整理自 http://www.slideshare.net/MattHarrison4/learn-90

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Three Python'isms to Remember

●dir

●help

●colon/indent shuffle

一、hello world

print "hello world"

from interpreter

$ python

>>> print "hello world"

hello world

REPL

Read, Eval, Print, Loop

$ python

>>> 2 + 2  # read, eval

4 # print

>>>   # repeat (loop)

Many developers keep a REPL handy during programming

From script
Make file hello.py with print "hello world"
Run with: python hello.py

(unix) script
Make file hello with
#!/usr/bin/env python
print "hello world"
Run with:
chmod +x hello
./hello

Python 3 hello world
printis no longer a statement, but a function
print("hello world")

二、Objects

Everything in Python is an object that has:

●an identity(id)

●a value(mutable or immutable)

id
>>> a = 4
>>> id(a)
6406896

Value
●Mutable:When you alter the item, the  id is still the same. Dictionary, List
●Immutable:String, Integer, Tuple

Mutable
>>> b =[]
>>> id(b)
140675605442000
>>> b.append(3)
>>> b
[3]

>>> id(b)
140675605442000 # SAME!

Immutable
>>> a = 4
>>> id(a)
6406896
>>> a =a + 1
>>> id(a)
6406872 # DIFFERENT!

三、Variables

a = 4  # Integer
b = 5.6  # Float
c = "hello"  # String
a = "4"  # rebound to String

Long

>>> import sys
>>> sys.maxint
9223372036854775807
>>> sys.maxint + 1
9223372036854775808L

四、Naming

●lowercase

●underscore_between_words

●don't start with numbers

See PEP 8

PEP:Python Enhancement Proposal (similar to JSR in Java)

五、Math

+, -, *, /, **(power), %(modulo)

Careful with integer division
>>> 3/4
0
>>> 3/4.
0.75
(In Python 3 // is integer division operator)

六、Strings

name = 'matt'
with_quote = "I ain't gonna"
longer = """This string has
multiple lines
in it"""

String escaping
Escape with \
>>> print 'He said, "I\'m sorry"'
He said, "I'm sorry"
>>> print '''He said, "I'm sorry"'''
He said, "I'm sorry"
>>> print """He said, "I'm sorry\""""
He said, "I'm sorry"


String formatting
c-like
>>> "%s %s" %('hello', 'world')
'hello world'
PEP 3101 style
>>> "{0} {1}".format('hello', 'world')
'hello world'

String Methods 

●s.endswith(sub)
Returns True if endswith sub
●s.find(sub)
Returns index of subor -1
●s.format(*args)
Places args in string

●s.index(sub)
Returns index of subor exception
●s.join(list)
Returns listitems separated by string
●s.strip()
Removes whitespace from start/end


七、Methods & dir

dir
Lists attributes and methods:
>>> dir("a string")
['__add__', '__class__', ..., 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

dunder methods
dunder(double under) or "special/magic"  methods determine what will happen  when +(__add__) or /(__div__) is  called.

help
>>> help("a string".startswith)
Help on built-in function startswith:
startswith(...)
S.startswith(prefix[, start[, end]]) -> bool
Return True if S starts with the specified prefix, False otherwise.
With optional start, test S beginning at that position.
With optional end, stop comparing S at that position.
prefix can also be a tuple of strings to try.

八、Comments

Comments follow a #

No multi-line comments

九、More Types

None
Pythonic way of saying NULL. Evaluates to False.
c = None

booleans
a = True
b = False

sequences
●lists
●tuples
●sets

十、Lists

Hold sequences.
How would we find out the attributes & methods of a list?

>>> dir([])
['__add__', '__class__', '__contains__',... ,'__iter__',... '__len__',... , 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 
'reverse', 'sort']

>>> a =[]
>>> a.append(4)
>>> a.append('hello')
>>> a.append(1)
>>> a.sort() # in place
>>> print a
[1, 4, 'hello']

How would we find out documentation for a method?

>>> help([].append)
Help on built-in function append:
append(...)

L.append(object) -- append object to end

List methods

●l.append(x)
Insert x at end of list
●l.extend(l2)
Add l2 items to list
●l.sort()

In place sort

●l.reverse()
Reverse list in place
●l.remove(item)
Remove first item found
●l.pop()
Remove/return item at end of list

十一、Dictionaries

Also called hashmap or associative array elsewhere
>>> age ={}
>>> age['george'] = 10
>>> age['fred'] = 12
>>> age['henry'] = 10
>>> print age['george']
10

Find out if 'matt' in age
>>> 'matt' in age
False

in statement
Uses __contains__dunder method to determine membership. (Or __iter__as fallback)

.get
>>> print age['charles']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'charles'
>>> print age.get('charles', 'Not found')
Not found

deleting keys
Removing 'charles' from age
>>> delage['charles']

del not in dir.   .pop is an alternative


十二、Functions

def add_2(num):

""" return 2

more than num

"""

return num + 2

five =add_2(3)

●def
●function name
●(parameters)
●:+ indent
●optional documentation
●body
●return

whitespace
Instead of { use a : and indent consistently (4 spaces)

invoke python -tt to error out during inconsistent tab/space usage in a file

default (named) parameters
def add_n(num, n=3):

"""default to

adding 3"""

return num +n

five =add_n(2)
ten =add_n(15, -5)

__doc__
Functions have docstrings. Accessible via .__doc__or help

>>> def echo(txt):

...   "echo back txt"

...   return txt

>>> help(echo)
Help on function echo in module __main__:
<BLANKLINE>
echo(txt)

echo back txt

<BLANKLINE>

naming
●lowercase
●underscore_between_words
●don't start with numbers
●verb
See PEP 8

十三、Conditionals

if grade > 90:

print "A"

elif grade > 80:

print "B"

elif grade > 70:

print "C"

else:

print "D"

Remember the colon/whitespace!


十四、Operators

Comparison Operators
Supports (>, >=, <, <=, ==, !=)
>>> 5 > 9
False
>>> 'matt' != 'fred'
True
>>> isinstance('matt', basestring)
True

>>> type("matt")
<type 'str'>

Boolean Operators
and, or, not(for logical), &, |, and ^(for bitwise)
>>> x = 5
>>> x < -4 or x > 4
True

Boolean note
Parens are only required for precedence
if (x > 10):

print "Big"

same as
if x > 10:

print "Big"

Chained comparisons

if 3 <x < 5:

print "Four!"

Same as
if x > 3 and x < 5:

print "Four!"

十五、Iteration

for number in [1,2,3,4,5,6]:

print number

for number in range(1, 7):

print number

range note
Python tends to follow half-open interval ([start,end)) with range and slices.
●end - start = length

●easy to concat ranges w/o overlap


Java/C-esque style of object in array, access (BAD):
animals =["cat", "dog", "bird"]
for index in range(len(animals)):

print index, animals[index]


If you need indices, use enumerate

animals =["cat", "dog", "bird"]
for index, value in enumerate(animals):

print index, value


Can breakout of nearest loop

for item insequence:
# process until first negative
if item < 0:
break

# process item


Can continue to skip over items

for item in sequence:
if item < 0:
continue

# process all positive items


Can loop over lists, strings, iterators, dictionaries... sequence like things:

my_dict ={ "name": "matt", "cash": 5.45}
for key inmy_dict.keys():
# process key
for value inmy_dict.values():
# process value
for key, value inmy_dict.items():

# process items


pass
pass is a null operation
for i in range(10):

# do nothing 10 times

pass


Hint: Don't modify list or dictionary contents while looping over them



十六:Slicing

Sequences (lists, tuples, strings, etc) can be sliced to pull out a single item

my_pets =["dog", "cat", "bird"]

favorite =my_pets[0]

bird =my_pets[-1]


Negative Indexing

Proper way to think of [negative indexing] is to reinterpret a[-X] as a[len(a)-X]


Slices can take an end index, to pull out a list of items
my_pets =["dog", "cat", "bird"] 
# a list
cat_and_dog =my_pets[0:2]
cat_and_dog2 =my_pets[:2]
cat_and_bird =my_pets[1:3]

cat_and_bird2 =my_pets[1:]


Slices can take a stride
my_pets =["dog", "cat", "bird"] 
# a list
dog_and_bird =my_pets[0:3:2]
zero_three_etc = range(0,10)[::3]

Just to beat it in
veg = "tomatoe"
correct =veg[:-1]
tmte =veg[::2]
eotamot =veg[::-1]


十八:File IO

File Input
Open a file to read from it (old style):
fin = open("foo.txt")
for line in fin:

# manipulate line

fin.close()

File Output
Open a file using 'w' to writeto a file:
fout = open("bar.txt", "w")
fout.write("hello world")
fout.close()

Always remember to close your files!

closing with with implicit close(new 2.5+ style)
with open('bar.txt') as fin:
for line in fin:

# process line


十九:Classes

class Animal(object):

def __init__(self, name):

self.name =name

def talk(self):

print "Generic Animal Sound"

animal =Animal("thing")
animal.talk()

notes:
●object(base class) (fixed in 3.X)
●dunder init (constructor)
●all methods take self as first parameter

Subclassing
class Cat(Animal):

def talk(self):

print '%ssays, "Meow!"' %(self.name)

cat =Cat("Groucho")
cat.talk() # invoke method


class Cheetah(Cat):

"""classes can hav

docstrings"""

def talk(self):

print "Growl"

naming
●CamelCase
●don't start with numbers

●Nouns


二十、Debugging

Poor mans
print works a lot of the time

Remember Clean up print statements. If you really need them, use logging or write to sys.stdout

pdb
import pdb; pdb.set_trace()

pdb commands
●h- help
●s- step into
●n- next
●c- continue
●w- where am I (in stack)?
●l- list code around me



相關文章