Download IntroToPython

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Getting Started with Python:
Constructs and Pitfalls
Sean Deitz
Advanced Programming Seminar
September 13, 2013
Source for this talk
• Guidelines taken from
– Mark Summerfield's
Programming in Python 3
A Complete Introduction to the Python Language
• In particular, the opening
– Python's “Beautiful Heart” in 8 pieces
• I agree with most of them, but I'll be adding
my comments.
1. Data Types
•
•
•
•
•
•
Dynamic typing
Simple casting (str() int())
Lists and Dictionaries (later)
type(var)
[] for sequence access
Raw strings and unicode strings
2. Object References
• Everything is object references
– Much like Java
•
•
•
•
Basic data types included
a = 6, a = “hello”, both are fine
Strong typing on objects, references not
Automatic printing at shell (later)
3. Collection Data Types
• Tuples (,)
– Immutable ordered sets
• Lists []
– Mutable ordered sets
• Dictionary {}
– Hash table of (key, index) pairs
4. Logical Operators
• is and is not
• None
• < <= == != >= >
– Chaining -1<=x<=1
– Python 3 type errors over addresses
• True and False booleans
• “and” and “or”
• in for collections
5. Control Flow Statements
• if cond: block
– elif and else
• Indentation for blocks
– Tabs and spaces different
– 4 space standard
• while cond: block:
– break, continue, else
5. Control Flow Continued
• for var in iterable: block
– for (ind, var) in enumerate(iterable)
• iterables
– Lists, Sequences (range(start,end,step))
– Dictionaries (keys, values, items, ordered)
• try: block except Type as var:
– Mutliple execpts, tuples
– Else, finally
6. Arithmetic Operators
• Usual operators
– + - / * += -= /= *= // **
– Notably no ++ or -– operators
– Unary + and – exist, so ++x is valid syntax
• ints are immutable
– Actually changes reference to new object
• Overloaded for strings and lists (seq)
– TypeError for mismatched types (str + int)
7. Input/Output
• input([prompt string])
• file = open(filename, mode)
– modes are read, write, or append (r, w, a)
– Returns a file object
– Default path python install location
• file.write(str)
• file.close() at the end
• print, pprint and others
8. Functions
• def funName(parameters): block
– Remember tabbing is important
– Return type dynamic as with all variables
• Strongly recommended to use builtins
– import module name
– from module import function (*)
– dir(modulename), help(function name)
• Modules for classes
Other useful notes
• subprocess.call([program, parameters])
– May need to adjust path
– Windows may need to call cmd
• os.chdir(path)
– os.path.realpath(os.curdir)
– sys.path[1]
• sys.argv
Other useful notes cont'd
• Sequence slicing [start:end:step]
– All parameters optional, [start,end)
• List comprehensions
– [function for var(s) in sequence]
– Similar to a lambda, quick construction
• Lambda functions
– lambda parameters: function
– Useful for map, filter, reduce...
Other caveats
• IDLE is limited
– Becomes unresponsive over large buffers
• Many things are already implemented
– Look for existing libraries to do what you
want
– dir and help are your best friends in the
interpreter
• Incorporating built in properties takes
some time to get used to __prop__
Other caveats continued
• Incorporating built in properties takes
some time to get used to (__prop__)
• Document strings as first line of function
• Be careful with copy constructors
• from copy import deepcopy
• class functions take self as first param
Lists
• Heterogenous collections, indexed from 0
• Append, extend, and slicing for insertion
– + does extend, adds sequential elements
– list[x:x] = seq inserts values at that location
– list[x:x+1] = [] removes value at index x
• len(list) gives you the length
• list.sort() modifies, sorted(list) does not
Lists
• list.reverse() modifies, reversed(list) does
not (also returns an iterator, not a list)
• append and pop to modify list end
• insert(val, 0), list = list[1:] for beginning
• index, remove, and count take values
– remember to use in for contains queries
• Lists can be self-referential, lazily
evaluated (list.append(list))
Strings
• Use the same slicing techniques as lists
– Except insertion, immutable objects
– s = s[:x] + 'new' + s[x+3:]
• ' “ equivalent, escape less
• ''' or “”” for multiline strings
• Find, replace, count
– Defined for fixed substrings (re next)
• str.split([del]) returns a list split on del
Regular Expressions
• import re
– Regular expression library, standard form
• re.compile(string) - optional
– Generates the regular expression pattern
•
•
•
•
re.search(pattern, string) -matches
re.sub(pattern, repl, string) - new string
re.findall(pattern, string) – just strings
re.finditer(pattern, string) - matches
More tricks
• if __name__ == '__main__':
– Main function only called when executed
• Arguments
– foo(val=default, *args, **kwargs)
• pass for an empty block
• # for inline comments, ''' for multiline
• pdb debugger, traceback for exceptions
Questions?
• Topics you'd like to hear more about
• Sample code/structures in action
• Coding conventions