Baixe o app para aproveitar ainda mais
Prévia do material em texto
A Python Book A Python Book: Beginning Python, Advanced Python, and Python Exercises Author: Dave Kuhlman Contact: dkuhlman@davekuhlman.org Address: http://www.davekuhlman.org Page 1 A Python Book Revision 1.3a Date December 15, 2013 Copyright Copyright (c) 2009 Dave Kuhlman. All Rights Reserved. This document is subject to the provisions of the Open Source MIT License http://www.opensource.org/licenses/mitlicense.php. Abstract This document is a selflearning document for a course in Python programming. This course contains (1) a part for beginners, (2) a discussion of several advanced topics that are of interest to Python programmers, and (3) a Python workbook with lots of exercises. Page 2 A Python Book Contents 1 Part 1 Beginning Python...........................................................................................10 1.1 Introductions Etc...................................................................................................10 1.1.1 Resources.......................................................................................................11 1.1.2 A general description of Python....................................................................12 1.1.3 Interactive Python..........................................................................................15 1.2 Lexical matters......................................................................................................15 1.2.1 Lines..............................................................................................................15 1.2.2 Comments......................................................................................................16 1.2.3 Names and tokens..........................................................................................16 1.2.4 Blocks and indentation..................................................................................16 1.2.5 Doc strings.....................................................................................................17 1.2.6 Program structure..........................................................................................17 1.2.7 Operators.......................................................................................................18 1.2.8 Also see.........................................................................................................19 1.2.9 Code evaluation.............................................................................................19 1.3 Statements and inspection preliminaries...........................................................20 1.4 Builtin datatypes.................................................................................................21 1.4.1 Numeric types................................................................................................21 1.4.2 Tuples and lists..............................................................................................21 1.4.3 Strings............................................................................................................24 1.4.3.1 The new string.format method...............................................................26 1.4.3.2 Unicode strings......................................................................................27 1.4.4 Dictionaries....................................................................................................29 1.4.5 Files...............................................................................................................32 1.4.6 Other builtin types........................................................................................35 1.4.6.1 The None value/type..............................................................................35 1.4.6.2 Boolean values.......................................................................................36 1.4.6.3 Sets and frozensets.................................................................................36 1.5 Functions and Classes A Preview......................................................................36 1.6 Statements.............................................................................................................37 1.6.1 Assignment statement....................................................................................37 1.6.2 import statement............................................................................................39 1.6.3 print statement...............................................................................................41 1.6.4 if: elif: else: statement...................................................................................43 1.6.5 for: statement.................................................................................................44 1.6.6 while: statement.............................................................................................48 Page 3 A Python Book 1.6.7 continue and break statements.......................................................................48 1.6.8 try: except: statement.....................................................................................49 1.6.9 raise statement...............................................................................................51 1.6.10 with: statement.............................................................................................52 1.6.10.1 Writing a context manager...................................................................52 1.6.10.2 Using the with: statement....................................................................53 1.6.11 del................................................................................................................54 1.6.12 case statement..............................................................................................55 1.7 Functions, Modules, Packages, and Debugging....................................................55 1.7.1 Functions.......................................................................................................55 1.7.1.1 The def statement...................................................................................55 1.7.1.2 Returning values....................................................................................55 1.7.1.3 Parameters..............................................................................................56 1.7.1.4 Arguments..............................................................................................56 1.7.1.5 Local variables.......................................................................................57 1.7.1.6 Other things to know about functions....................................................57 1.7.1.7 Global variables and the global statement.............................................58 1.7.1.8 Doc strings for functions.......................................................................60 1.7.1.9 Decorators for functions........................................................................60 1.7.2 lambda...........................................................................................................61 1.7.3 Iterators and generators.................................................................................62 1.7.4 Modules.........................................................................................................67 1.7.4.1 Doc strings for modules.........................................................................68 1.7.5 Packages........................................................................................................68 1.8 Classes...................................................................................................................691.8.1 A simple class................................................................................................69 1.8.2 Defining methods..........................................................................................70 1.8.3 The constructor..............................................................................................70 1.8.4 Member variables..........................................................................................70 1.8.5 Calling methods.............................................................................................71 1.8.6 Adding inheritance........................................................................................71 1.8.7 Class variables...............................................................................................72 1.8.8 Class methods and static methods.................................................................72 1.8.9 Properties.......................................................................................................74 1.8.10 Interfaces.....................................................................................................75 1.8.11 Newstyle classes.........................................................................................75 1.8.12 Doc strings for classes.................................................................................77 1.8.13 Private members..........................................................................................77 1.9 Special Tasks.........................................................................................................77 1.9.1 Debugging tools.............................................................................................77 Page 4 A Python Book 1.9.2 File input and output......................................................................................78 1.9.3 Unit tests........................................................................................................80 1.9.3.1 A simple example..................................................................................80 1.9.3.2 Unit test suites........................................................................................81 1.9.3.3 Additional unittest features....................................................................83 1.9.3.4 Guidance on Unit Testing......................................................................85 1.9.4 doctest............................................................................................................85 1.9.5 The Python database API..............................................................................87 1.9.6 Installing Python packages............................................................................88 1.10 More Python Features and Exercises..................................................................89 2 Part 2 Advanced Python............................................................................................90 2.1 Introduction Python 201 (Slightly) Advanced Python Topics.......................90 2.2 Regular Expressions..............................................................................................90 2.2.1 Defining regular expressions.........................................................................90 2.2.2 Compiling regular expressions......................................................................91 2.2.3 Using regular expressions..............................................................................91 2.2.4 Using match objects to extract a value..........................................................92 2.2.5 Extracting multiple items..............................................................................93 2.2.6 Replacing multiple items...............................................................................94 2.3 Iterator Objects......................................................................................................96 2.3.1 Example A generator function....................................................................98 2.3.2 Example A class containing a generator method......................................100 2.3.3 Example An iterator class.........................................................................102 2.3.4 Example An iterator class that uses yield.................................................104 2.3.5 Example A list comprehension.................................................................105 2.3.6 Example A generator expression..............................................................105 2.4 Unit Tests............................................................................................................106 2.4.1 Defining unit tests........................................................................................106 2.4.1.1 Create a test class.................................................................................106 2.5 Extending and embedding Python......................................................................109 2.5.1 Introduction and concepts............................................................................109 2.5.2 Extension modules.......................................................................................110 2.5.3 SWIG...........................................................................................................112 2.5.4 Pyrex............................................................................................................115 2.5.5 SWIG vs. Pyrex...........................................................................................120 2.5.6 Cython.........................................................................................................120 2.5.7 Extension types............................................................................................122 2.5.8 Extension classes.........................................................................................122 2.6 Parsing.................................................................................................................122 2.6.1 Special purpose parsers...............................................................................123 Page 5 A Python Book 2.6.2 Writing a recursive descent parser by hand.................................................124 2.6.3 Creating a lexer/tokenizer with Plex...........................................................131 2.6.4 A survey of existing tools............................................................................141 2.6.5 Creating a parser with PLY.........................................................................141 2.6.6 Creating a parser with pyparsing.................................................................148 2.6.6.1 Parsing commadelimited lines............................................................148 2.6.6.2 Parsing functors...................................................................................149 2.6.6.3 Parsing names, phone numbers, etc.....................................................150 2.6.6.4 A more complex example....................................................................151 2.7 GUI Applications................................................................................................153 2.7.1 Introduction.................................................................................................153 2.7.2 PyGtk...........................................................................................................153 2.7.2.1 A simple message dialog box..............................................................153 2.7.2.2 A simple text input dialog box.............................................................1562.7.2.3 A file selection dialog box...................................................................158 2.7.3 EasyGUI......................................................................................................160 2.7.3.1 A simple EasyGUI example................................................................161 2.7.3.2 An EasyGUI file open dialog example................................................161 2.8 Guidance on Packages and Modules...................................................................161 2.8.1 Introduction.................................................................................................161 2.8.2 Implementing Packages...............................................................................162 2.8.3 Using Packages............................................................................................162 2.8.4 Distributing and Installing Packages...........................................................162 2.9 End Matter...........................................................................................................164 2.9.1 Acknowledgements and Thanks..................................................................164 2.9.2 See Also.......................................................................................................164 3 Part 3 Python Workbook.........................................................................................165 3.1 Introduction.........................................................................................................165 3.2 Lexical Structures................................................................................................165 3.2.1 Variables and names....................................................................................165 3.2.2 Line structure...............................................................................................167 3.2.3 Indentation and program structure...............................................................168 3.3 Execution Model.................................................................................................169 3.4 Builtin Data Types.............................................................................................170 3.4.1 Numbers......................................................................................................170 3.4.1.1 Literal representations of numbers......................................................171 3.4.1.2 Operators for numbers.........................................................................173 3.4.1.3 Methods on numbers............................................................................175 3.4.2 Lists.............................................................................................................175 3.4.2.1 Literal representation of lists...............................................................176 Page 6 A Python Book 3.4.2.2 Operators on lists.................................................................................178 3.4.2.3 Methods on lists...................................................................................178 3.4.2.4 List comprehensions............................................................................180 3.4.3 Strings..........................................................................................................182 3.4.3.1 Characters............................................................................................183 3.4.3.2 Operators on strings.............................................................................184 3.4.3.3 Methods on strings...............................................................................185 3.4.3.4 Raw strings..........................................................................................187 3.4.3.5 Unicode strings....................................................................................188 3.4.4 Dictionaries..................................................................................................190 3.4.4.1 Literal representation of dictionaries...................................................190 3.4.4.2 Operators on dictionaries.....................................................................191 3.4.4.3 Methods on dictionaries.......................................................................192 3.4.5 Files.............................................................................................................195 3.4.6 A few miscellaneous data types..................................................................197 3.4.6.1 None.....................................................................................................197 3.4.6.2 The booleans True and False...............................................................197 3.5 Statements...........................................................................................................198 3.5.1 Assignment statement..................................................................................198 3.5.2 print statement.............................................................................................200 3.5.3 if: statement exercises..................................................................................201 3.5.4 for: statement exercises...............................................................................202 3.5.5 while: statement exercises...........................................................................205 3.5.6 break and continue statements.....................................................................206 3.5.7 Exceptions and the try:except: and raise statements...................................207 3.6 Functions.............................................................................................................210 3.6.1 Optional arguments and default values.......................................................211 3.6.2 Passing functions as arguments...................................................................213 3.6.3 Extra args and keyword args.......................................................................214 3.6.3.1 Order of arguments (positional, extra, and keyword args)..................216 3.6.4 Functions and ducktyping and polymorphism...........................................216 3.6.5 Recursive functions.....................................................................................217 3.6.6 Generators and iterators...............................................................................219 3.7 Objectoriented programming and classes..........................................................223 3.7.1 The constructor............................................................................................224 3.7.2 Inheritance Implementing a subclass.......................................................225 3.7.3 Classes and polymorphism..........................................................................227 3.7.4 Recursive calls to methods..........................................................................228 3.7.5 Class variables, class methods, and static methods.....................................230 3.7.5.1 Decorators for classmethod and staticmethod.....................................233 Page 7 A Python Book 3.8 Additional and Advanced Topics........................................................................234 3.8.1 Decorators and how to implement them......................................................234 3.8.1.1 Decorators with arguments..................................................................235 3.8.1.2 Stacked decorators...............................................................................236 3.8.1.3More help with decorators...................................................................238 3.8.2 Iterables.......................................................................................................239 3.8.2.1 A few preliminaries on Iterables..........................................................239 3.8.2.2 More help with iterables......................................................................240 3.9 Applications and Recipes....................................................................................240 3.9.1 XML SAX, minidom, ElementTree, Lxml..............................................241 3.9.2 Relational database access...........................................................................249 3.9.3 CSV comma separated value files...........................................................255 3.9.4 YAML and PyYAML..................................................................................256 3.9.5 Json..............................................................................................................258 4 Part 4 Generating Python Bindings for XML.........................................................260 4.1 Introduction.........................................................................................................260 4.2 Generating the code.............................................................................................261 4.3 Using the generated code to parse and export an XML document.....................263 4.4 Some command line options you might want to know.......................................263 4.5 The graphical frontend.......................................................................................264 4.6 Adding applicationspecific behavior.................................................................265 4.6.1 Implementing custom subclasses................................................................265 4.6.2 Using the generated "API" from your application......................................266 4.6.3 A combined approach..................................................................................267 4.7 Special situations and uses..................................................................................269 4.7.1 Generic, typeindependent processing.........................................................269 4.7.1.1 Step 1 generate the bindings............................................................270 4.7.1.2 Step 2 add applicationspecific code................................................270 4.7.1.3 Step 3 write a test/driver harness.....................................................274 4.7.1.4 Step 4 run the test application..........................................................276 4.8 Some hints...........................................................................................................276 4.8.1 Children defined with maxOccurs greater than 1........................................276 4.8.2 Children defined with simple numeric types...............................................277 4.8.3 The type of an element's character content..................................................277 4.8.4 Constructors and their default values..........................................................277 Page 8 A Python Book Preface This book is a collection of materials that I've used when conducting Python training and also materials from my Web site that are intended for selfinstruction. You may prefer a machine readable copy of this book. You can find it in various formats here: ● HTML – http://www.davekuhlman.org/python_book_01.html ● PDF http://www.davekuhlman.org /python_book_01.pdf ● ODF/OpenOffice http://www.davekuhlman.org /python_book_01.odt And, let me thank the students in my Python classes. Their questions and suggestions were a great help in the preparation of these materials. Page 9 A Python Book 1 Part 1 Beginning Python 1.1 Introductions Etc Introductions Practical matters: restrooms, breakroom, lunch and break times, etc. Starting the Python interactive interpreter. Also, IPython and Idle. Running scripts Editors Choose an editor which you can configure so that it indents with 4 spaces, not tab characters. For a list of editors for Python, see: http://wiki.python.org/moin/PythonEditors. A few possible editors: ● SciTE http://www.scintilla.org/SciTE.html. ● MS Windows only (1) TextPad http://www.textpad.com; (2) UltraEdit http://www.ultraedit.com/. ● Jed See http://www.jedsoft.org/jed/. ● Emacs See http://www.gnu.org/software/emacs/ and http://www.xemacs.org/faq/xemacsfaq.html. ● jEdit Requires a bit of customization for Python See http://jedit.org. ● Vim http://www.vim.org/ ● Geany http://www.geany.org/ ● And many more. Interactive interpreters: ● python ● ipython ● Idle IDEs Also see http://en.wikipedia.org/wiki/List_of_integrated_development_environments_for_Python: ● PyWin MS Windows only. Available at: http://sourceforge.net/projects/pywin32/. ● WingIDE See http://wingware.com/wingide/. ● Eclipse http://eclipse.org/. There is a plugin that supports Python. ● Kdevelop Linux/KDE See http://www.kdevelop.org/. ● Eric Linux KDE? See http://ericide.pythonprojects.org/index.html ● Emacs and SciTE will evaluate a Python buffer within the editor. Page 10 A Python Book 1.1.1 Resources Where else to get help: ● Python home page http://www.python.org ● Python standard documentation http://www.python.org/doc/. You will also find links to tutorials there. ● FAQs http://www.python.org/doc/faq/. ● The Python Wiki http://wiki.python.org/ ● The Python Package Index Lots of Python packages https://pypi.python.org/pypi ● Special interest groups (SIGs) http://www.python.org/sigs/ ● Other python related mailing lists and lists for specific applications (for example, Zope, Twisted, etc). Try: http://dir.gmane.org/search.php?match=python. ● http://sourceforge.net Lots of projects. Search for "python". ● USENET comp.lang.python. Can also be accessed through Gmane: http://dir.gmane.org/gmane.comp.python.general. ● The Python tutor email list http://mail.python.org/mailman/listinfo/tutor Local documentation: ● On MS Windows, the Python documentation is installed with the standard installation. ● Install the standard Python documentation on your machine from http://www.python.org/doc/. ● pydoc. Example, on the command line, type: pydoc re. ● Import a module, then view its .__doc__ attribute. ● At the interactive prompt, use help(obj). You might need to import it first. Example: >>> import urllib >>> help(urllib) ● In IPython, the question mark operator gives help. Example: In [13]: open? Type: builtin_function_or_method Base Class: <type 'builtin_function_or_method'> String Form: <builtin function open> Namespace: Python builtin Docstring: open(name[, mode[, buffering]]) > file object Open a file using the file() type, returns a file object. Constructor Docstring: x.__init__(...) initializes x; see x.__class__.__doc__ for signature Page 11 A Python Book Callable: Yes Call def: Calling definition not available.Call docstring: x.__call__(...) <==> x(...) 1.1.2 A general description of Python Python is a highlevel general purpose programming language: ● Because code is automatically compiled to byte code and executed, Python is suitable for use as a scripting language, Web application implementation language, etc. ● Because Python can be extended in C and C++, Python can provide the speed needed for even compute intensive tasks. ● Because of its strong structuring constructs(nested code blocks, functions, classes, modules, and packages) and its consistent use of objects and objectoriented programming, Python enables us to write clear, logical applications for small and large tasks. Important features of Python: ● Builtin high level data types: strings, lists, dictionaries, etc. ● The usual control structures: if, ifelse, ifelifelse, while, plus a powerful collection iterator (for). ● Multiple levels of organizational structure: functions, classes, modules, and packages. These assist in organizing code. An excellent and large example is the Python standard library. ● Compile on the fly to byte code Source code is compiled to byte code without a separate compile step. Source code modules can also be "precompiled" to byte code files. ● Objectoriented Python provides a consistent way to use objects: everything is an object. And, in Python it is easy to implement new object types (called classes in objectoriented programming). ● Extensions in C and C++ Extension modules and extension types can be written by hand. There are also tools that help with this, for example, SWIG, sip, Pyrex. ● Jython is a version of Python that "plays well with" Java. See: The Jython Project http://www.jython.org/Project/. Some things you will need to know: ● Python uses indentation to show block structure. Indent one level to show the beginning of a block. Outdent one level to show the end of a block. As an example, the following Cstyle code: if (x) { Page 12 A Python Book if (y) { f1() } f2() } in Python would be: if x: if y: f1() f2() And, the convention is to use four spaces (and no hard tabs) for each level of indentation. Actually, it's more than a convention; it's practically a requirement. Following that "convention" will make it so much easier to merge your Python code with code from other sources. An overview of Python: ● A scripting language Python is suitable (1) for embedding, (2) for writing small unstructured scripts, (3) for "quick and dirty" programs. ● Not a scripting language (1) Python scales. (2) Python encourages us to write code that is clear and wellstructured. ● Interpreted, but also compiled to bytecode. Modules are automatically compiled (to .pyc) when imported, but may also be explicitly compiled. ● Provides an interactive command line and interpreter shell. In fact, there are several. ● Dynamic For example: ○ Types are bound to values, not to variables. ○ Function and method lookup is done at runtime. ○ Values are inspectable. ○ There is an interactive interpreter, more than one, in fact. ○ You can list the methods supported by any given object. ● Strongly typed at runtime, not compiletime. Objects (values) have a type, but variables do not. ● Reasonably high level High level builtin data types; high level control structures (for walking lists and iterators, for example). ● Objectoriented Almost everything is an object. Simple object definition. Data hiding by agreement. Multiple inheritance. Interfaces by convention. Polymorphism. ● Highly structured Statements, functions, classes, modules, and packages enable us to write large, wellstructured applications. Why structure? Readability, locateability, modifiability. ● Explicitness Page 13 A Python Book ● Firstclass objects: ○ Definition: Can (1) pass to function; (2) return from function; (3) stuff into a data structure. ○ Operators can be applied to values (not variables). Example: f(x)[3] ● Indented block structure "Python is pseudocode that runs." ● Embedding and extending Python Python provides a welldocumented and supported way (1) to embed the Python interpreter in C/C++ applications and (2) to extend Python with modules and objects implemented in C/C++. ○ In some cases, SWIG can generate wrappers for existing C/C++ code automatically. See http://www.swig.org/ ○ Cython enables us to generate C code from Python and to "easily" create wrappers for C/C++ functions. See http://www.cosc.canterbury.ac.nz/~greg/python/Pyrex/ ○ To embed and extend Python with Java, there is Jython. See http://www.jython.org/ ● Automatic garbage collection. (But, there is a gc module to allow explicit control of garbage collection.) ● Comparison with other languages: compiled languages (e.g. C/C++); Java; Perl, Tcl, and Ruby. Python excells at: development speed, execution speed, clarity and maintainability. ● Varieties of Python: ○ CPython Standard Python 2.x implemented in C. ○ Jython Python for the Java environment http://www.jython.org/ ○ PyPy Python with a JIT compiler and stackless mode http://pypy.org/ ○ Stackless Python with enhanced thread support and microthreads etc. http://www.stackless.com/ ○ IronPython Python for .NET and the CLR http://ironpython.net/ ○ Python 3 The new, new Python. This is intended as a replacement for Python 2.x. http://www.python.org/doc/. A few differences (from Python 2.x): ■ The print statement changed to the print function. ■ Strings are unicode by default. ■ Classes are all "new style" classes. ■ Changes to syntax for catching exceptions. ■ Changes to integers no long integer; integer division with automatic convert to float. ■ More pervasive use of iterables (rather than collections). ■ Etc. For a more information about differences between Python 2.x and Python 3.x, see the description of the various fixes that can be applied with the 2to3 tool: Page 14 A Python Book http://docs.python.org/3/library/2to3.html#fixers The migration tool, 2to3, eases the conversion of 2.x code to 3.x. ● Also see The Zen of Python http://www.python.org/peps/pep0020.html. Or, at the Python interactive prompt, type: >>> import this 1.1.3 Interactive Python If you execute Python from the command line with no script (no arguments), Python gives you an interactive prompt. This is an excellent facility for learning Python and for trying small snippets of code. Many of the examples that follow were developed using the Python interactive prompt. Start the Python interactive interpreter by typing python with no arguments at the command line. For example: $ python Python 2.6.1 (r261:67515, Jan 11 2009, 15:19:23) [GCC 4.3.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> print 'hello' hello >>> You may also want to consider using IDLE. IDLE is a graphical integrated development environment for Python; it contains a Python shell. It is likely that Idle was installed for you when you installed Python. You will find a script to start up IDLE in the Tools/scripts directory of your Python distribution. IDLE requires Tkinter. In addition, there are tools that will give you a more powerful and fancy Python interactive interpreter. One example is IPython, which is available at http://ipython.scipy.org/. 1.2 Lexical matters 1.2.1 Lines ● Python does what you want it to do most of the time so that you only have to add extra characters some of the time. ● Statement separator is a semicolon, but is only needed when there is more than one statement on a line. And, writing more than one statement on the same line is considered bad form. ● Continuation lines A backslash as last character of the line makes the Page 15 A Python Book following line a continuation of the current line. But, note that an opening "context" (parenthesis, square bracket, or curly bracket) makes the backslash unnecessary. 1.2.2 Comments Everything after "#" on a line is ignored. No block comments, but doc strings are a comment in quotes at the beginning of a module, class, method or function. Also, editors with support for Python oftenprovide the ability to comment out selected blocks of code, usually with "##". 1.2.3 Names and tokens ● Allowed characters: az AZ 09 underscore, and must begin with a letter or underscore. ● Names and identifiers are case sensitive. ● Identifiers can be of unlimited length. ● Special names, customizing, etc. Usually begin and end in double underscores. ● Special name classes Single and double underscores. ○ Single leading single underscore Suggests a "private" method or variable name. Not imported by "from module import *". ○ Single trailing underscore Use it to avoid conflicts with Python keywords. ○ Double leading underscores Used in a class definition to cause name mangling (weak hiding). But, not often used. ● Naming conventions Not rigid, but: ○ Modules and packages all lower case. ○ Globals and constants Upper case. ○ Classes Bumpy caps with initial upper. ○ Methods and functions All lower case with words separated by underscores. ○ Local variables Lower case (with underscore between words) or bumpy caps with initial lower or your choice. ○ Good advice Follow the conventions used in the code on which you are working. ● Names/variables in Python do not have a type. Values have types. 1.2.4 Blocks and indentation Python represents block structure and nested block structure with indentation, not with begin and end brackets. The empty block Use the pass noop statement. Benefits of the use of indentation to indicate structure: Page 16 A Python Book ● Reduces the need for a coding standard. Only need to specify that indentation is 4 spaces and no hard tabs. ● Reduces inconsistency. Code from different sources follow the same indentation style. It has to. ● Reduces work. Only need to get the indentation correct, not both indentation and brackets. ● Reduces clutter. Eliminates all the curly brackets. ● If it looks correct, it is correct. Indentation cannot fool the reader. Editor considerations The standard is 4 spaces (no hard tabs) for each indentation level. You will need a text editor that helps you respect that. 1.2.5 Doc strings Doc strings are like comments, but they are carried with executing code. Doc strings can be viewed with several tools, e.g. help(), obj.__doc__, and, in IPython, a question mark (?) after a name will produce help. A doc string is written as a quoted string that is at the top of a module or the first lines after the header line of a function or class. We can use triplequoting to create doc strings that span multiple lines. There are also tools that extract and format doc strings, for example: ● pydoc Documentation generator and online help system http://docs.python.org/lib/modulepydoc.html. ● epydoc Epydoc: Automatic API Documentation Generation for Python http://epydoc.sourceforge.net/index.html ● Sphinx Can also extract documentation from Python doc strings. See http://sphinxdoc.org/index.html. See the following for suggestions and more information on doc strings: Docstring conventions http://www.python.org/dev/peps/pep0257/. 1.2.6 Program structure ● Execution def, class, etc are executable statements that add something to the current namespace. Modules can be both executable and importable. ● Statements, data structures, functions, classes, modules, packages. ● Functions ● Classes ● Modules correspond to files with a "*.py" extension. Packages correspond to a directory (or folder) in the file system; a package contains a file named "__init__.py". Both modules and packages can be imported (see section import Page 17 A Python Book statement). ● Packages A directory containing a file named "__init__.py". Can provide additional initialization when the package or a module in it is loaded (imported). 1.2.7 Operators ● See: http://docs.python.org/ref/operators.html. Python defines the following operators: + * ** / // % << >> & | ^ ~ < > <= >= == != <> The comparison operators <> and != are alternate spellings of the same operator. != is the preferred spelling; <> is obsolescent. ● Logical operators: and or is not in ● There are also (1) the dot operator, (2) the subscript operator [], and the function/method call operator (). ● For information on the precedences of operators, see the table at http://docs.python.org/2/reference/expressions.html#operatorprecedence, which is reproduced below. ● For information on what the different operators do, the section in the "Python Language Reference" titled "Special method names" may be of help: http://docs.python.org/2/reference/datamodel.html#specialmethodnames The following table summarizes the operator precedences in Python, from lowest precedence (least binding) to highest precedence (most binding). Operators on the same line have the same precedence. Unless the syntax is explicitly given, operators are binary. Operators on the same line group left to right (except for comparisons, including tests, which all have the same precedence and chain from left to right see section 5.9 and exponentiation, which groups from right to left): Operator Description ======================== ================== lambda Lambda expression or Boolean OR and Boolean AND not x Boolean NOT in, not in Membership tests is, is not Identity tests <, <=, >, >=, <>, !=, == Comparisons | Bitwise OR ^ Bitwise XOR & Bitwise AND <<, >> Shifts Page 18 A Python Book +, Addition and subtraction *, /, % Multiplication, division, remainder +x, x Positive, negative ~x Bitwise not ** Exponentiation x.attribute Attribute reference x[index] Subscription x[index:index] Slicing f(arguments...) Function call (expressions...) Binding or tuple display [expressions...] List display {key:datum...} Dictionary display `expressions...` String conversion ● Note that most operators result in calls to methods with special names, for example __add__, __sub__, __mul__, etc. See Special method names http://docs.python.org/2/reference/datamodel.html#specialmethodnames Later, we will see how these operators can be emulated in classes that you define yourself, through the use of these special names. 1.2.8 Also see For more on lexical matters and Python styles, see: ● Code Like a Pythonista: Idiomatic Python http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html. ● Style Guide for Python Code http://www.python.org/dev/peps/pep0008/ ● The flake8 style checking program. See https://pypi.python.org/pypi/flake8. Also see the pylint code checker: https://pypi.python.org/pypi/pylint. 1.2.9 Code evaluation Understanding the Python execution model How Python evaluates and executes your code. Evaluating expressions. Creating names/variables Binding The following all create names (variables) and bind values (objects) to them: (1) assignment, (2) function definition, (3) class definition, (4) function and method call, (5) importing a module, ... First class objects Almost all objects in Python are first class. Definition: An object is first class if: (1) we can put it in a structured object; (2) we can pass it to a function; (3) we can return it from a function. References Objects (or references to them) can be shared. What does this mean?● The object(s) satisfy the identity test operator is. Page 19 A Python Book ● The builtin function id() returns the same value. ● The consequences for mutable objects are different from those for immutable objects. ● Changing (updating) a mutable object referenced through one variable or container also changes that object referenced through other variables or containers, because it is the same object. ● del() The builtin function del() removes a reference, not (necessarily) the object itself. 1.3 Statements and inspection preliminaries print Example: print obj print "one", "two", 'three' for: Example: stuff = ['aa', 'bb', 'cc'] for item in stuff: print item Learn what the type of an object is Example: type(obj) Learn what attributes an object has and what it's capabilities are Example: dir(obj) value = "a message" dir(value) Get help on a class or an object Example: help(str) help("") value = "abc" help(value) help(value.upper) In IPython (but not standard Python), you can also get help at the interactive prompt by typing "?" and "??" after an object. Example: In [48]: a = '' In [49]: a.upper? Type: builtin_function_or_method String Form:<builtin method upper of str object at 0x7f1c426e0508> Docstring: S.upper() > string Page 20 A Python Book Return a copy of the string S converted to uppercase. 1.4 Builtin datatypes For information on builtin data types, see section Builtin Types http://docs.python.org/lib/types.html in the Python standard documentation. 1.4.1 Numeric types The numeric types are: ● Plain integers Same precision as a C long, usually a 32bit binary number. ● Long integers Define with 100L. But, plain integers are automatically promoted when needed. ● Floats Implemented as a C double. Precision depends on your machine. See sys.float_info. ● Complex numbers Define with, for example, 3j or complex(3.0, 2.0). See 2.3.4 Numeric Types int, float, long, complex http://docs.python.org/lib/typesnumeric.html. Python does mixed arithmetic. Integer division truncates. This is changed in Python 3. Use float(n) to force coercion to a float. Example: In [8]: a = 4 In [9]: b = 5 In [10]: a / b Out[10]: 0 # possibly wrong? In [11]: float(a) / b Out[11]: 0.8 Applying the function call operator (parentheses) to a type or class creates an instance of that type or class. Scientific and heavily numeric programming High level Python is not very efficient for numerical programming. But, there are libraries that help Numpy and SciPy See: SciPy: Scientific Tools for Python http://scipy.org/ 1.4.2 Tuples and lists List A list is a dynamic array/sequence. It is ordered and indexable. A list is mutable. List constructors: [], list(). range() and xrange(): Page 21 A Python Book ● range(n) creates a list of n integers. Optional arguments are the starting integer and a stride. ● xrange is like range, except that it creates an iterator that produces the items in the list of integers instead of the list itself. Tuples A tuple is a sequence. A tuple is immutable. Tuple constructors: (), but really a comma; also tuple(). Tuples are like lists, but are not mutable. Python lists are (1) heterogeneous (2) indexable, and (3) dynamic. For example, we can add to a list and make it longer. Notes on sequence constructors: ● To construct a tuple with a single element, use (x,); a tuple with a single element requires a comma. ● You can spread elements across multiple lines (and no need for backslash continuation character "\"). ● A comma can follow the last element. The length of a tuple or list (or other container): len(mylist). Operators for lists: ● Try: list1 + list2, list1 * n, list1 += list2, etc. ● Comparison operators: <, ==, >=, etc. ● Test for membership with the in operator. Example: In [77]: a = [11, 22, 33] In [78]: a Out[78]: [11, 22, 33] In [79]: 22 in a Out[79]: True In [80]: 44 in a Out[80]: False Subscription: ● Indexing into a sequence ● Negative indexes Effectively, length of sequence plus (minus) index. ● Slicing Example: data[2:5]. Default values: beginning and end of list. ● Slicing with strides Example: data[::2]. Operations on tuples No operations that change the tuple, since tuples are immutable. We can do iteration and subscription. We can do "contains" (the in operator) and get the length (the len() operator). We can use certain boolean operators. Operations on lists Operations similar to tuples plus: ● Append mylist.append(newitem). Page 22 A Python Book ● Insert mylist.insert(index, newitem). Note on efficiency: The insert method is not as fast as the append method. If you find that you need to do a large number of mylist.insert(0, obj) (that is, inserting at the beginning of the list) consider using a deque instead. See: http://docs.python.org/2/library/collections.html#collections.deque. Or, use append and reverse. ● Extend mylist.extend(anotherlist). Also can use + and +=. ● Remove mylist.remove(item) and mylist.pop(). Note that append() together with pop() implements a stack. ● Delete del mylist[index]. ● Pop Get last (rightmost) item and remove from list mylist.pop(). List operators +, *, etc. For more operations and operators on sequences, see: http://docs.python.org/2/library/stdtypes.html#sequencetypesstrunicodelisttuplebyte arraybufferxrange. Exercises: ● Create an empty list. Append 4 strings to the list. Then pop one item off the end of the list. Solution: In [25]: a = [] In [26]: a.append('aaa') In [27]: a.append('bbb') In [28]: a.append('ccc') In [29]: a.append('ddd') In [30]: print a ['aaa', 'bbb', 'ccc', 'ddd'] In [31]: a.pop() Out[31]: 'ddd' ● Use the for statement to print the items in the list. Solution: In [32]: for item in a: ....: print item ....: aaa bbb ccc ● Use the string join operation to concatenate the items in the list. Solution: In [33]: '||'.join(a) Out[33]: 'aaa||bbb||ccc' ● Use lists containing three (3) elements to create and show a tree: In [37]: b = ['bb', None, None] In [38]: c = ['cc', None, None] In [39]: root = ['aa', b, c] Page 23 A Python Book In [40]: In [40]: In [40]: def show_tree(t): ....: if not t: ....: return ....: print t[0] ....: show_tree(t[1]) ....: show_tree(t[2]) ....: ....: In [41]: show_tree(root) aa bb cc Note that we will learn a better way to represent tree structures when we cover implementing classes in Python. 1.4.3 Strings Strings are sequences. They are immutable. They are indexable. They are iterable. For operations on strings, see http://docs.python.org/lib/stringmethods.html or use: >>> help(str) Or: >>> dir("abc") String operations (methods). String operators, e.g. +, <, <=, ==, etc.. Constructors/literals: ● Quotes: single and double. Escaping quotes and other special characters with a backslash. ● Triple quoting Use triple single quotes or double quotes to define multiline strings. ● str() The constructor and the name of the type/class. ● 'aSeparator'.join(aList) ● Many more. Escape characters in strings \t, \n, \\, etc. String formatting See: http://docs.python.org/2/library/stdtypes.html#stringformattingoperations Examples: In [18]: name = 'dave' Page 24 A Python Book In [19]: size = 25 In [20]: factor = 3.45 In [21]: print 'Name: %s Size: %d Factor: %3.4f' % (name, size, factor, ) Name: dave Size: 25 Factor: 3.4500 In [25]: print 'Name: %s Size: %d Factor: %08.4f' % (name, size, factor, ) Name: dave Size: 25 Factor: 003.4500 If the righthand argument to theformatting operator is a dictionary, then you can (actually, must) use the names of keys in the dictionary in your format strings. Examples: In [115]: values = {'vegetable': 'chard', 'fruit': 'nectarine'} In [116]: 'I love %(vegetable)s and I love %(fruit)s.' % values Out[116]: 'I love chard and I love nectarine.' Also consider using the right justify and left justify operations. Examples: mystring.rjust(20), mystring.ljust(20, ':'). In Python 3, the str.format method is preferred to the string formatting operator. This method is also available in Python 2.7. It has benefits and advantages over the string formatting operator. You can start learning about it here: http://docs.python.org/2/library/stdtypes.html#stringmethods Exercises: ● Use a literal to create a string containing (1) a single quote, (2) a double quote, (3) both a single and double quote. Solutions: "Some 'quoted' text." 'Some "quoted" text.' 'Some "quoted" \'extra\' text.' ● Write a string literal that spans multiple lines. Solution: """This string spans several lines because it is a little long. """ ● Use the string join operation to create a string that contains a colon as a separator. Solution: >>> content = [] >>> content.append('finch') >>> content.append('sparrow') >>> content.append('thrush') >>> content.append('jay') >>> contentstr = ':'.join(content) >>> print contentstr finch:sparrow:thrush:jay ● Use string formatting to produce a string containing your last and first names, Page 25 A Python Book separated by a comma. Solution: >>> first = 'Dave' >>> last = 'Kuhlman' >>> full = '%s, %s' % (last, first, ) >>> print full Kuhlman, Dave Incrementally building up large strings from lots of small strings the old way Since strings in Python are immutable, appending to a string requires a reallocation. So, it is faster to append to a list, then use join. Example: In [25]: strlist = [] In [26]: strlist.append('Line #1') In [27]: strlist.append('Line #2') In [28]: strlist.append('Line #3') In [29]: str = '\n'.join(strlist) In [30]: print str Line #1 Line #2 Line #3 Incrementally building up large strings from lots of small strings the new way The += operation on strings has been optimized. So, when you do this str1 += str2, even many times, it is efficient. The translate method enables us to map the characters in a string, replacing those in one table by those in another. And, the maketrans function in the string module, makes it easy to create the mapping table: import string def test(): a = 'axbycz' t = string.maketrans('abc', '123') print a print a.translate(t) test() 1.4.3.1 The new string.format method The new way to do string formatting (which is standard in Python 3 and perhaps preferred for new code in Python 2) is to use the string.format method. See here: ● http://docs.python.org/2/library/stdtypes.html#str.format ● http://docs.python.org/2/library/string.html#formatstringsyntax ● http://docs.python.org/2/library/string.html#formatspecificationminilanguage Some examples: Page 26 A Python Book In [1]: 'aaa {1} bbb {0} ccc {1} ddd'.format('xx', 'yy', ) Out[1]: 'aaa yy bbb xx ccc yy ddd' In [2]: 'number: {0:05d} ok'.format(25) Out[2]: 'number: 00025 ok' In [4]: 'n1: {num1} n2: {num2}'.format(num2=25, num1=100) Out[4]: 'n1: 100 n2: 25' In [5]: 'n1: {num1} n2: {num2} again: {num1}'.format(num2=25, num1=100) Out[5]: 'n1: 100 n2: 25 again: 100' In [6]: 'number: {:05d} ok'.format(25) Out[6]: 'number: 00025 ok' In [7]: values = {'name': 'dave', 'hobby': 'birding'} In [8]: 'user: {name} activity: {hobby}'.format(**values) Out[8]: 'user: dave activity: birding' 1.4.3.2 Unicode strings Representing unicode: In [96]: a = u'abcd' In [97]: a Out[97]: u'abcd' In [98]: b = unicode('efgh') In [99]: b Out[99]: u'efgh' Convert to unicode: a_string.decode(encoding). Examples: In [102]: 'abcd'.decode('utf8') Out[102]: u'abcd' In [103]: In [104]: 'abcd'.decode(sys.getdefaultencoding()) Out[104]: u'abcd' Convert out of unicode: a_unicode_string.encode(encoding). Examples: In [107]: a = u'abcd' In [108]: a.encode('utf8') Out[108]: 'abcd' In [109]: a.encode(sys.getdefaultencoding()) Out[109]: 'abcd' In [110]: b = u'Sel\xe7uk' In [111]: print b.encode('utf8') Selçuk Test for unicode type Example: In [122]: import types In [123]: a = u'abcd' In [124]: type(a) is types.UnicodeType Out[124]: True In [125]: Page 27 A Python Book In [126]: type(a) is type(u'') Out[126]: True Or better: In [127]: isinstance(a, unicode) Out[127]: True An example with a character "c" with a hachek: In [135]: name = 'Ivan Krsti\xc4\x87' In [136]: name.decode('utf8') Out[136]: u'Ivan Krsti\u0107' In [137]: In [138]: len(name) Out[138]: 12 In [139]: len(name.decode('utf8')) Out[139]: 11 You can also create a unicode character by using the unichr() builtin function: In [2]: a = 'aa' + unichr(170) + 'bb' In [3]: a Out[3]: u'aa\xaabb' In [6]: b = a.encode('utf8') In [7]: b Out[7]: 'aa\xc2\xaabb' In [8]: print b aaªbb Guidance for use of encodings and unicode If you are working with a multibyte character set: 1. Convert/decode from an external encoding to unicode early (my_string.decode(encoding)). 2. Do your work in unicode. 3. Convert/encode to an external encoding late (my_string.encode(encoding)). For more information, see: ● Unicode In Python, Completely Demystified http://farmdev.com/talks/unicode/ ● PEP 100: Python Unicode Integration http://www.python.org/dev/peps/pep0100/ ● In the Python standard library: ○ codecs Codec registry and base classes http://docs.python.org/2/library/codecs.html#modulecodecs ○ Standard Encodings http://docs.python.org/2/library/codecs.html#standardencodings If you are reading and writing multibyte character data from or to a file, then look at the Page 28 A Python Book codecs.open() in the codecs module http://docs.python.org/2/library/codecs.html#codecs.open. Handling multibyte character sets in Python 3 is easier, I think, but different. One hint is to use the encoding keyword parameter to the open builtin function. Here is an example: def test(): infile = open('infile1.txt', 'r', encoding='utf8') outfile = open('outfile1.txt', 'w', encoding='utf8') for line in infile: line = line.upper() outfile.write(line) infile.close() outfile.close() test() 1.4.4 Dictionaries A dictionary is a collection, whose values are accessible by key. It is a collection of namevalue pairs. The order of elements in a dictionary is undefined. But, we can iterate over (1) the keys, (2) the values, and (3) the items (keyvalue pairs) in a dictionary. We can set the value of a key and we can get the value associated with a key. Keys must be immutable objects: ints, strings, tuples, ... Literals for constructing dictionaries: d1 = {} d2 = {key1: value1, key2: value2, } Constructor for dictionaries dict() can be used to create instances of the class dict. Some examples: dict({'one': 2, 'two': 3}) dict({'one': 2, 'two': 3}.items()) dict({'one': 2, 'two': 3}.iteritems()) dict(zip(('one', 'two'), (2, 3))) dict([['two', 3], ['one', 2]]) dict(one=2, two=3) dict([(['one', 'two'][i2], i) for i in (2, 3)]) For operations on dictionaries, see http://docs.python.org/lib/typesmapping.html or use: >>> help({}) Or: Page 29 A Python Book >>> dir({}) Indexing Access or add items to a dictionary with the indexing operator [ ]. Example: In [102]: dict1 = {} In [103]: dict1['name'] = 'dave' In [104]: dict1['category'] = 38 In [105]: dict1 Out[105]: {'category': 38, 'name': 'dave'} Some of the operations produce the keys, the values, and the items (pairs) in adictionary. Examples: In [43]: d = {'aa': 111, 'bb': 222} In [44]: d.keys() Out[44]: ['aa', 'bb'] In [45]: d.values() Out[45]: [111, 222] In [46]: d.items() Out[46]: [('aa', 111), ('bb', 222)] When iterating over large dictionaries, use methods iterkeys(), itervalues(), and iteritems(). Example: In [47]: In [47]: d = {'aa': 111, 'bb': 222} In [48]: for key in d.iterkeys(): ....: print key ....: ....: aa bb To test for the existence of a key in a dictionary, use the in operator or the mydict.has_key(k) method. The in operator is preferred. Example: >>> d = {'tomato': 101, 'cucumber': 102} >>> k = 'tomato' >>> k in d True >>> d.has_key(k) True You can often avoid the need for a test by using method get. Example: >>> d = {'tomato': 101, 'cucumber': 102} >>> d.get('tomato', 1) 101 >>> d.get('chard', 1) 1 >>> if d.get('eggplant') is None: ... print 'missing' Page 30 A Python Book ... missing Dictionary "view" objects provide dynamic (automatically updated) views of the keys or the values or the items in a dictionary. View objects also support set operations. Create views with mydict.viewkeys(), mydict.viewvalues(), and mydict.viewitems(). See: http://docs.python.org/2/library/stdtypes.html#dictionaryviewobjects. The dictionary setdefault method provides a way to get the value associated with a key from a dictionary and to set that value if the key is missing. Example: In [106]: a Out[106]: {} In [108]: a.setdefault('cc', 33) Out[108]: 33 In [109]: a Out[109]: {'cc': 33} In [110]: a.setdefault('cc', 44) Out[110]: 33 In [111]: a Out[111]: {'cc': 33} Exercises: ● Write a literal that defines a dictionary using both string literals and variables containing strings. Solution: >>> first = 'Dave' >>> last = 'Kuhlman' >>> name_dict = {first: last, 'Elvis': 'Presley'} >>> print name_dict {'Dave': 'Kuhlman', 'Elvis': 'Presley'} ● Write statements that iterate over (1) the keys, (2) the values, and (3) the items in a dictionary. (Note: Requires introduction of the for statement.) Solutions: >>> d = {'aa': 111, 'bb': 222, 'cc': 333} >>> for key in d.keys(): ... print key ... aa cc bb >>> for value in d.values(): ... print value ... 111 333 222 >>> for item in d.items(): ... print item Page 31 A Python Book ... ('aa', 111) ('cc', 333) ('bb', 222) >>> for key, value in d.items(): ... print key, '::', value ... aa :: 111 cc :: 333 bb :: 222 Additional notes on dictionaries: ● You can use iterkeys(), itervalues(), iteritems() to obtain iterators over keys, values, and items. ● A dictionary itself is iterable: it iterates over its keys. So, the following two lines are equivalent: for k in myDict: print k for k in myDict.iterkeys(): print k ● The in operator tests for a key in a dictionary. Example: In [52]: mydict = {'peach': 'sweet', 'lemon': 'tangy'} In [53]: key = 'peach' In [54]: if key in mydict: ....: print mydict[key] ....: sweet 1.4.5 Files Open a file with the open factory method. Example: In [28]: f = open('mylog.txt', 'w') In [29]: f.write('message #1\n') In [30]: f.write('message #2\n') In [31]: f.write('message #3\n') In [32]: f.close() In [33]: f = file('mylog.txt', 'r') In [34]: for line in f: ....: print line, ....: message #1 message #2 message #3 In [35]: f.close() Notes: ● Use the (builtin) open(path, mode) function to open a file and create a file object. You could also use file(), but open() is recommended. Page 32 A Python Book ● A file object that is open for reading a text file supports the iterator protocol and, therefore, can be used in a for statement. It iterates over the lines in the file. This is most likely only useful for text files. ● open is a factory method that creates file objects. Use it to open files for reading, writing, and appending. Examples: infile = open('myfile.txt', 'r') # open for reading outfile = open('myfile.txt', 'w') # open for (over) writing log = open('myfile.txt', 'a') # open for appending to existing content ● When you have finished with a file, close it. Examples: infile.close() outfile.close() ● You can also use the with: statement to automatically close the file. Example: with open('tmp01.txt', 'r') as infile: for x in infile: print x, The above works because a file is a context manager: it obeys the context manager protocol. A file has methods __enter__ and __exit__, and the __exit__ method automatically closes the file for us. See the section on the with: statement. ● In order to open multiple files, you can nest with: statements, or use a single with: statement with multiple "expression as target" clauses. Example: def test(): # # use multiple nested with: statements. with open('small_file.txt', 'r') as infile: with open('tmp_outfile.txt', 'w') as outfile: for line in infile: outfile.write('line: %s' % line.upper()) print infile print outfile # # use a single with: statement. with open('small_file.txt', 'r') as infile, \ open('tmp_outfile.txt', 'w') as outfile: for line in infile: outfile.write('line: %s' % line.upper()) print infile print outfile test() ● file is the file type and can be used as a constructor to create file objects. But, Page 33 A Python Book open is preferred. ● Lines read from a text file have a newline. Strip it off with something like: line.rstrip('\n'). ● For binary files you should add the binary mode, for example: rb, wb. For more about modes, see the description of the open() function at Builtin Functions http://docs.python.org/lib/builtinfuncs.html. ● Learn more about file objects and the methods they provide at: 2.3.9 File Objects http://docs.python.org/2/library/stdtypes.html#fileobjects. You can also append to an existing file. Note the "a" mode in the following example: In [39]: f = open('mylog.txt', 'a') In [40]: f.write('message #4\n') In [41]: f.close() In [42]: f = file('mylog.txt', 'r') In [43]: for line in f: ....: print line, ....: message #1 message #2 message #3 message #4 In [44]: f.close() For binary files, add "b" to the mode. Not strictly necessary on UNIX, but needed on MS Windows. And, you will want to make your code portable across platforms. Example: In [62]: import zipfile In [63]: outfile = open('tmp1.zip', 'wb') In [64]: zfile = zipfile.ZipFile(outfile, 'w', zipfile.ZIP_DEFLATED) In [65]: zfile.writestr('entry1', 'my heroes have always been cowboys') In [66]: zfile.writestr('entry2', 'and they still are it seems') In [67]: zfile.writestr('entry3', 'sadly in search of and') In [68]: zfile.writestr('entry4', 'on step in back of') In [69]: In [70]: zfile.writestr('entry4', 'one step in back of') In [71]: zfile.writestr('entry5', 'themselves and their slow moving ways') In [72]: zfile.close() In [73]: outfile.close() In [75]: $ $ unzip lv tmp1.zip Archive: tmp1.zip Length Method Size Ratio Date Time CRC32 Name 34 Defl:N 36 6% 052908 17:04 f6b7d921 entry1 27 Defl:N 29 7% 052908 17:07 10da8f3d entry2 22 Defl:N 24 9% 052908 17:07 3fd17fda entry3 18 Defl:N 20 11% 052908 17:08 d55182e6 entry4 Page 34 A Python Book 19 Defl:N 21 11% 052908 17:08 1a892acd entry4 37 Defl:N 39 5% 052908 17:09 e213708c entry5 157 169 8% 6 files Exercises: ● Read all of the lines of a file into a list. Print the 3rd and 5th lines in the file/list.Solution: In [55]: f = open('tmp1.txt', 'r') In [56]: lines = f.readlines() In [57]: f.close() In [58]: lines Out[58]: ['the\n', 'big\n', 'brown\n', 'dog\n', 'had\n', 'long\n', 'hair\n'] In [59]: print lines[2] brown In [61]: print lines[4] had More notes: ● Strip newlines (and other whitespace) from a string with methods strip(), lstrip(), and rstrip(). ● Get the current position within a file by using myfile.tell(). ● Set the current position within a file by using myfile.seek(). It may be helpful to use os.SEEK_CUR and os.SEEK_END. For example: ○ f.seek(2, os.SEEK_CUR) advances the position by two ○ f.seek(3, os.SEEK_END) sets the position to the third to last. ○ f.seek(25) sets the position relative to the beginning of the file. 1.4.6 Other builtin types Other builtin data types are described in section Builtin Types http://docs.python.org/lib/types.html in the Python standard documentation. 1.4.6.1 The None value/type The unique value None is used to indicate "no value", "nothing", "nonexistence", etc. There is only one None value; in other words, it's a singleton. Use is to test for None. Example: >>> flag = None >>> >>> if flag is None: ... print 'clear' Page 35 A Python Book ... clear >>> if flag is not None: ... print 'hello' ... >>> 1.4.6.2 Boolean values True and False are the boolean values. The following values also count as false, for example, in an if: statement: False, numeric zero, None, the empty string, an empty list, an empty dictionary, any empty container, etc. All other values, including True, act as true values. 1.4.6.3 Sets and frozensets A set is an unordered collection of immutable objects. A set does not contain duplicates. Sets support several set operations, for example: union, intersection, difference, ... A frozenset is like a set, except that a frozenset is immutable. Therefore, a frozenset is hashable and can be used as a key in a dictionary, and it can be added to a set. Create a set with the set constructor. Examples: >>> a = set() >>> a set([]) >>> a.add('aa') >>> a.add('bb') >>> a set(['aa', 'bb']) >>> b = set([11, 22]) >>> b set([11, 22]) >>> c = set([22, 33]) >>> b.union(c) set([33, 11, 22]) >>> b.intersection(c) set([22]) For more information on sets, see: Set Types set, frozenset http://docs.python.org/lib/typesset.html 1.5 Functions and Classes A Preview Structured code Python programs are made up of expressions, statements, functions, classes, modules, and packages. Page 36 A Python Book Python objects are firstclass objects. Expressions are evaluated. Statements are executed. Functions (1) are objects and (2) are callable. Objectoriented programming in Python. Modeling "real world" objects. (1) Encapsulation; (2) data hiding; (3) inheritance. Polymorphism. Classes (1) encapsulation; (2) data hiding; (3) inheritance. An overview of the structure of a typical class: (1) methods; (2) the constructor; (3) class (static) variables; (4) super/subclasses. 1.6 Statements 1.6.1 Assignment statement Form target = expression. Possible targets: ● Identifier ● Tuple or list Can be nested. Left and right sides must have equivalent structure. Example: >>> x, y, z = 11, 22, 33 >>> [x, y, z] = 111, 222, 333 >>> a, (b, c) = 11, (22, 33) >>> a, B = 11, (22, 33) This feature can be used to simulate an enum: In [22]: LITTLE, MEDIUM, LARGE = range(1, 4) In [23]: LITTLE Out[23]: 1 In [24]: MEDIUM Out[24]: 2 ● Subscription of a sequence, dictionary, etc. Example: In [10]: a = range(10) In [11]: a Out[11]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] In [12]: a[3] = 'abc' In [13]: a Out[13]: [0, 1, 2, 'abc', 4, 5, 6, 7, 8, 9] In [14]: In [14]: b = {'aa': 11, 'bb': 22} In [15]: b Page 37 A Python Book Out[15]: {'aa': 11, 'bb': 22} In [16]: b['bb'] = 1000 In [17]: b['cc'] = 2000 In [18]: b Out[18]: {'aa': 11, 'bb': 1000, 'cc': 2000} ● A slice of a sequence Note that the sequence must be mutable. Example: In [1]: a = range(10) In [2]: a Out[2]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] In [3]: a[2:5] = [11, 22, 33, 44, 55, 66] In [4]: a Out[4]: [0, 1, 11, 22, 33, 44, 55, 66, 5, 6, 7, 8, 9] ● Attribute reference Example: >>> class MyClass: ... pass ... >>> anObj = MyClass() >>> anObj.desc = 'pretty' >>> print anObj.desc pretty There is also augmented assignment. Examples: >>> index = 0 >>> index += 1 >>> index += 5 >>> index += f(x) >>> index = 1 >>> index *= 3 Things to note: ● Assignment to a name creates a new variable (if it does not exist in the namespace) and a binding. Specifically, it binds a value to the new name. Calling a function also does this to the (formal) parameters within the local namespace. ● In Python, a language with dynamic typing, the data type is associated with the value, not the variable, as is the case in statically typed languages. ● Assignment can also cause sharing of an object. Example: obj1 = A() obj2 = obj1 Check to determine that the same object is shared with id(obj) or the is operator. Example: In [23]: a = range(10) In [24]: a Out[24]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] In [25]: b = a In [26]: b Page 38 A Python Book Out[26]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] In [27]: b[3] = 333 In [28]: b Out[28]: [0, 1, 2, 333, 4, 5, 6, 7, 8, 9] In [29]: a Out[29]: [0, 1, 2, 333, 4, 5, 6, 7, 8, 9] In [30]: a is b Out[30]: True In [31]: print id(a), id(b) 31037920 31037920 ● You can also do multiple assignment in a single statement. Example: In [32]: a = b = 123 In [33]: a Out[33]: 123 In [34]: b Out[34]: 123 In [35]: In [35]: In [35]: a = b = [11, 22] In [36]: a is b Out[36]: True ● You can interchange (swap) the value of two variables using assignment and packing/unpacking: >>> a = 111 >>> b = 222 >>> a, b = b, a >>> a 222 >>> b 111 1.6.2 import statement Make module (or objects in the module) available. What import does: ● Evaluate the content of a module. ● Likely to create variables in the local (module) namespace. ● Evaluation of a specific module only happens once during a given run of the program. Therefore, a module is shared across an application. ● A module is evaluated from top to bottom. Later statements can replace values created earlier. This is true of functions and classes, as well as (other) variables. ● Which statements are evaluated? Assignment, class, def, ... ● Use the following idiom to make a module both runable and importable: if __name__ == '__main__': Page 39 A Python Book # import pdb; pdb.set_trace() main() # or "test()" or some other function defined in module Notes: ○ The above condition will be true only when the module is run as a script and will not be true when the module is imported. ○ The line containing pdb can be copied any place in your program and uncommented, and then the program will drop into the Python debugger when that location is reached. Where import looks for modules: ● sys.path shows where it looks. ● There are some standard places. ● Add additional directories by setting the environment variable PYTHONPATH. ● You can also add paths by modifying sys.path, for example: import sys sys.path.insert(0, '/path/to/my/module') ● Packages need a file named __init__.py. ● Extensions To determine what extensions import looks for, do: >>> import imp >>> imp.get_suffixes() [('.so', 'rb', 3), ('module.so', 'rb', 3), ('.py', 'U', 1), ('.pyc', 'rb', 2)] Forms of the import statement: ● import A Names in the local (module) namespace are accessible with the dot operator. ● import A as B Import the module A, but bind the module object to the variable B. ● import A1, A2 Not recommended ● from A import B ● from A import B1, B2 ● from A
Compartilhar