This chapter starts with a nontechnical introduction to Python and then takes a quick look at ways to run Python programs. Its main goal is to get you set up to run Python code on your own machine, so you can work along with the examples and exercises in the later chapters. Along the way, we’ll study the bare essentials of Python configuration—just enough to get started. You don’t have to work along with the book on your own, but we strongly encourage it if possible. Even if you can’t, this chapter will be useful when you do start coding on your own.
We’ll also take a quick first look at Python module files here. Most of the examples you see early in the book are typed at Python’s interactive interpreter command-line. Code entered this way goes away as soon as you leave Python. If you want to save your code in a file, you need to know a bit about Python modules, so module fundamentals are introduced here. We’ll save most module details for a later chapter.
If you’ve bought this book, chances are you already know what Python is, and why it’s an important tool to learn. If not, you probably won’t be sold on Python until you’ve learned the language by reading the rest of this book. But before jumping into details, we’d like to use a few pages to briefly introduce some of the main reasons behind Python’s popularity. (Even if you don’t care for nontechnical overviews, your manager might.)
Python is perhaps best described as an object-oriented scripting language: its design mixes software engineering features of traditional languages with the usability of scripting languages. But some of Python’s best assets tell a more complete story.
Python is an object-oriented language, from the ground up. Its class model supports advanced notions such as polymorphism, operator overloading, and multiple inheritance; yet in the context of Python’s dynamic typing, object-oriented programming (OOP) is remarkably easy to apply. In fact, if you don’t understand these terms, you’ll find they are much easier to learn with Python than with just about any other OOP language available.
Besides serving as a powerful code structuring and reuse device, Python’s OOP nature makes it ideal as a scripting tool for object-oriented systems languages such as C++ and Java. For example, with the appropriate glue code, Python programs can subclass (specialize) classes implemented in C++ or Java. Of equal significance, OOP is an option in Python; you can go far without having to become an object guru all at once.
Python is freeware—something which has lately been come to be called open source software. As with Tcl and Perl, you can get the entire system for free over the Internet. There are no restrictions on copying it, embedding it in your systems, or shipping it with your products. In fact, you can even sell Python, if you’re so inclined.
But don’t get the wrong idea: “free” doesn’t mean “unsupported.” On the contrary, the Python online community responds to user queries with a speed that most commercial software vendors would do well to notice. Moreover, because Python comes with complete source code, it empowers developers and creates a large team of implementation experts. Although studying or changing a programming language’s implementation isn’t everyone’s idea of fun, it’s comforting to know that it’s available as a final resort and ultimate documentation source.
Python is written in portable ANSI C, and compiles and runs on virtually every major platform in use today. For example, it runs on Unix systems, Linux, MS-DOS, MS-Windows (95, 98, NT), Macintosh, Amiga, Be-OS, OS/2, VMS, QNX, and more. Further, Python programs are automatically compiled to portable bytecode, which runs the same on any platform with a compatible version of Python installed (more on this in Section 184.108.40.206).
What that means is that Python programs that use the core language run the same on Unix, MS-Windows, and any other system with a Python interpreter. Most Python ports also contain platform-specific extensions (e.g., COM support on MS-Windows), but the core Python language and libraries work the same everywhere.
Python also includes a standard interface to the Tk GUI system called Tkinter, which is portable to the X Window System, MS Windows, and the Macintosh, and now provides a native look-and-feel on each platform. By using Python’s Tkinter API, Python programs can implement full-featured graphical user interfaces that run on all major GUI platforms without program changes.
From a features perspective, Python is something of a hybrid. Its tool set places it between traditional scripting languages (such as Tcl, Scheme, and Perl), and systems languages (such as C, C++, and Java). Python provides all the simplicity and ease of use of a scripting language, along with more advanced programming tools typically found in systems development languages. Unlike some scripting languages, this combination makes Python useful for substantial development projects. Some of the things we’ll find in Python’s high-level toolbox:
Python keeps track of the kinds of objects your program uses when it runs; it doesn’t require complicated type and size declarations in your code.
Python provides commonly used data structures such as lists, dictionaries, and strings, as an intrinsic part of the language; as we’ll see, they’re both flexible and easy to use.
To process all those object types, Python comes with powerful and standard operations, including concatenation (joining collections), slicing (extracting sections), sorting, mapping, and more.
For more specific tasks, Python also comes with a large collection of pre-coded library tools that support everything from regular-expression matching to networking to object persistence.
Because Python is freeware, it encourages developers to contribute precoded tools that support tasks beyond Python’s built-ins; you’ll find free support for COM, imaging, CORBA ORBs, XML, and much more.
Finally, for building larger systems, Python includes tools such as modules, classes, and exceptions; they allow you to organize systems into components, do OOP, and handle events gracefully.
Despite the array of tools in Python, it retains a remarkably simple syntax and design. As we’ll see, the result is a powerful programming tool, which retains the usability of a scripting language.
Python programs can be easily “glued” to components written in other languages. In technical terms, by employing the Python/C integration APIs, Python programs can be both extended by (called to) components written in C or C++, and embedded in (called by) C or C++ programs. That means you can add functionality to the Python system as needed and use Python programs within other environments or systems.
Although we won’t talk much about Python/C integration, it’s a major feature of the language and one reason Python is usually called a scripting language. By mixing Python with components written in a compiled language such as C or C++, it becomes an easy-to-use frontend language and customization tool. It also makes Python good at rapid prototyping: systems may be implemented in Python first to leverage its speed of development, and later moved to C for delivery, one piece at a time, according to performance requirements.
Speaking of glue, the PythonWin port of Python for MS-Windows platforms also lets Python programs talk to other components written for the COM API, allowing Python to be used as a more powerful alternative to Visual Basic. And a new alternative implementation of Python, called JPython, lets Python programs communicate with Java programs, making Python an ideal tool for scripting Java-based web applications.
For many, Python’s combination of rapid turnaround and language simplicity make programming more fun than work. To run a Python program, you simply type it and run it. There are no intermediate compile and link steps (as when using languages such as C or C++). As with other interpreted languages, Python executes programs immediately, which makes for both an interactive programming experience and rapid turnaround after program changes.
Strictly speaking, Python programs are compiled (translated) to an intermediate form called bytecode , which is then run by the interpreter. But because the compile step is automatic and hidden to programmers, Python achieves the development speed of an interpreter without the performance loss inherent in purely interpreted languages.
Of course, development cycle turnaround is only one aspect of Python’s ease of use. It also provides a deliberately simple syntax and powerful high-level built-in tools. Python has been called “executable pseudocode”: because it eliminates much of the complexity in other tools, you’ll find that Python programs are often a fraction of the size of equivalent programs in languages such as C, C++, and Java.
This brings us to the topic of this book: compared to other programming languages, the core Python language is amazingly easy to learn. In fact, you can expect to be coding significant Python programs in a matter of days (and perhaps in just hours, if you’re already an experienced programmer). That’s good news both for professional developers seeking to learn the language to use on the job, as well as for end users of systems that expose a Python layer for customization or control.
Besides being a well-designed programming language, Python is also useful for accomplishing real-world tasks—the sorts of things developers do day in and day out. It’s commonly used in a variety of domains, as a tool for scripting other components and implementing standalone programs. Some of Python’s major roles help define what it is.
Python’s built-in interfaces to operating-system services make it ideal for writing portable, maintainable system-administration tools (sometimes called shell scripts). Python comes with POSIX bindings and support for the usual OS tools: environment variables, files, sockets, pipes, processes, threads, regular expressions, and so on.
Python’s simplicity and rapid turnaround also make it a good match for GUI programming. As previously mentioned, it comes with a standard object-oriented interface to the Tk GUI API called Tkinter, which allows Python programs to implement portable GUIs with native look and feel. If portability isn’t a priority, you can also use MFC classes to build GUIs with the PythonWin port for MS Windows, X Window System interfaces on Unix, Mac toolbox bindings on the Macintosh, and KDE and GNOME interfaces for Linux. For applications that run in web browsers, JPython provides another GUI option.
Python’s ability to be extended by and embedded in C and C++ systems makes it useful as a glue language, for scripting the behavior of other systems and components. For instance, by integrating a C library into Python, Python can test and launch its components. And by embedding Python in a product, it can code on-site customizations without having to recompile the entire product (or ship its source code to your customers). Python’s COM support on MS-Windows and the JPython system provide alternative ways to script applications.
To Python programs, components written in Python and C look the same. Because of this, it’s possible to prototype systems in Python initially and then move components to a compiled language such as C or C++ for delivery. Unlike some prototyping tools, Python doesn’t require a complete rewrite once the prototype has solidified; parts of the system that don’t require the efficiency of a language such as C++ can remain coded in Python for ease of maintenance and use.
Python comes with standard Internet utility modules that allow Python programs to communicate over sockets, extract form information sent to a server-side CGI script, parse HTML, transfer files by FTP, process XML files, and much more. There are also a number of peripheral tools for doing Internet programming in Python. For instance, the HTMLGen and pythondoc systems generate HTML files from Python class-based descriptions, and the JPython system mentioned above provides for seamless Python/Java integration.
The NumPy numeric programming extension for Python includes such advanced tools as an array object, interfaces to standard mathematical libraries, and much more. By integrating Python with numeric routines coded in a compiled language for speed, NumPy turns Python into a sophisticated yet easy-to-use numeric programming tool.
Python’s standard pickle module provides a simple object-persistence system: it allows programs to easily save and restore entire Python objects to files. For more traditional database demands, there are Python interfaces to Sybase, Oracle, Informix, ODBC, and more. There is even a portable SQL database API for Python that runs the same on a variety of underlying database systems, and a system named gadfly that implements an SQL database for Python programs.
Python is commonly applied in more domains than can be mentioned here. But in general, many are just instances of Python’s component integration role in action. By adding Python as a frontend to libraries of components written in a compiled language such as C, Python becomes useful for scripting in a variety of domains.
For instance, image processing for Python is implemented as a set of library components implemented in a compiled language such as C, along with a Python frontend layer on top used to configure and launch the compiled components. The easy-to-use Python layer complements the efficiency of the underlying compiled-language components. Since the majority of the “programming” in such a system is done in the Python layer, most users need never deal with the complexity of the optimized components (and can get by with the core language covered in this text).
Red Hat uses Python in its Linux install tools.
Microsoft has shipped a product partially written in Python.
Infoseek uses Python as an implementation and end-user customization language in web search products.
Yahoo! uses Python in a variety of its Internet services.
NASA uses Python for mission-control-system implementation.
Lawrence Livermore Labs uses Python for a variety of numeric programming tasks.
Industrial Light and Magic and others use Python to produce commercial-grade animation.
There are even more exciting applications of Python we’d like to mention here, but alas, some companies prefer not to make their use of Python known because they consider it to be a competitive advantage. See Python’s web site (http://www.python.org) for a more comprehensive and up-to-date list of companies using Python.
Is more powerful than Tcl, which makes it applicable to larger systems development
Has a cleaner syntax and simpler design than Perl, which makes it more readable and maintainable
Doesn’t compete head-on with Java; Python is a scripting language, Java is a systems language such as C++
Especially for programs that do more than scan text files, and that might have to be read in the future by others (or by you!), we think Python fits the bill better than any other scripting language available today. Of course, both of your authors are card-carrying Python evangelists, so take these comments as you may.
And that concludes the hype portion of this book. The best way to judge a language is to see it in action, so now we turn to a strictly technical introduction to the language. In the remainder of this chapter, we explore ways to run Python programs, peek at some useful configuration and install details, and introduce you to the notion of module files for making code permanent. Again, our goal here is to give you just enough information to run the examples and exercises in the rest of the book; we won’t really start programming until Chapter 2, but make sure you have a handle on the start-up details shown here before moving on.
 So, you might ask, how in the world do Python trainers get any business? For one thing, there are still challenges in Python beyond the core language that will keep you busy beyond those first few days. As we’ll see, Python’s collection of libraries, as well as its peripheral tools (e.g., the Tkinter GUI and Python/C integration APIs) are a big part of real Python programming.
 We say more about JPython and other systems in Chapter 10. Among other things, JPython can compile Python programs to Java virtual machine code (so they may run as client-side applets in any Java-aware browser) and allows Python programs to talk to Java libraries (for instance, to create AWT GUIs on a client).