Core Python Programming 148
Ravi writes "Python, the dynamic object oriented programming language created by Guido van Rossum is known to deliver both the power and general applicability of traditional compiled languages without the complexities accompanying them. Coupled with its ease of use, programs written in Python can be run on multiple Operating systems and system architectures which gives it the same portability of any interpreted language. My first brush with Python was when I tried out a beautiful game called PySol — which is more like a collection of over 200 card games and PySol is entirely coded using the Python language. Nowadays a variety of Python web frameworks have also cropped up which promise the same kind of rapid application development that is possible using other programming languages." Read the rest of Ravi's review
Core Python Programming - 2nd Edition | |
author | Wesley.J.Chun |
pages | 1050 |
publisher | Prentice Hall |
rating | 9 |
reviewer | Ravi |
ISBN | 0-13-226993-7 |
summary | An excellent book to learn the Python programming Language |
I found the book titled "Core Python Programming" authored by Wesley.J.Chun and published by Prentice Hall to be an ideal book to learn the wonderful Python language. This book is quite voluminous, with 23 chapters spanning 1050 pages. The book is divided into two parts the first part titled Core Python which contain 14 chapters which impart a sound understanding of the semantics of the language and the second part titled "Advanced Topics" which contain a collection of 9 chapters which give a good introduction to the specialized uses such as in database programming, network programming, using threads in python, GUI programming and so on.
In the first chapter of the book, the readers get to know the various features of Python and the steps needed to install Python on ones machine. When you install Python on your machine, it also provides its own shell where you can execute pieces of python code. The author has taken advantage of this functionality of Python in narrating the concepts throughout the book. Each concept and syntax is followed by bits of code which the readers can try out in the Python shell in its entity. I found this process much easier in learning this language as one need not go through the write — compile — execute cycle which is more prevalent in the traditional languages.
In depth coverage has been provided for important concepts such as lists, tuples and dictionaries as well as data-types and string sequences and they have been provided separate chapters of their own. The sixth chapter titled "Sequences: Strings, Lists and Tuples" is the second largest in the book and is quite detailed in its coverage of the topic.
Chapter 9 deals with file manipulations where the author introduces all the built in functions available in Python which allow one to open, read from and write to a file. Interestingly, the functions are also illustrated by aid of short easy to understand examples. A couple of modules related to file handling are also introduced in this chapter.
Errors and exceptions form the basis of the 10th chapter where different errors and exceptions supported in Python are explained. This chapter also explains how programmers can create custom exception classes which I found quite informative.
One of the biggest advantages of Python is that all its functionality is split up into modules. A module could be just a single python file which contain a collection of functions or classes which can be re-used in programs written in Python. And all one has to do is import the module into ones programs to start using those pieces of code. The chapter 12 titled Modules give a firm understanding of this concept and also introduces different ways in which you can import external pieces of code into the Python program.
Chapter 13 titled "Object Oriented Programming" is by far the largest chapter in this book and spans over 100 pages. In this chapter, the author endeavors to give a sound base to Object oriented concepts as well as how they relate to programming in Python. The author introduces a large number of Python classes, methods and descriptors in this chapter.
Regular expressions play a very important part in programming verily because manipulating text/data is a necessity. And it is possible to easily modify and mould data to ones choosing by way of regular expressions. Python has strong support for regular expressions. The second part titled "Advanced concepts" of the book starts with a chapter on regular expressions. In this chapter, one gets to know about the regular expression module and many functions associated with the module. The author also provides a couple of examples which give insights into the ways in which regular expressions can be used in Python to reformat data.
The next two chapters give an introduction to the world of sockets and how Python can be used to write client server programs.
Multithreaded programming forms the basis of the 18th chapter. Here the author introduces a couple of modules available in Python which make it quite easy to create threads in ones Python program.
I found the chapter titled "Web Programming" very interesting to read. Especially since Python is used in a large way to create dynamic websites. And the next chapter titled "Database programming" gives a sound introduction to the Python objects which allow one to easily connect to and retrieve data from the databases.
I found this book really informative, especially suited for upcoming Python programmers. At the end of each chapter, there is an exercise section which imparts a nice touch to this book as it allows you to test your knowledge. Even though the advanced topics (second part of the book) are not covered in depth, the author succeeds in providing enough knowledge about the relevant Python modules and functions followed by a couple of examples which whets ones appetite without overwhelming the reader. This is the second edition of the book and it has been significantly revamped to include new features introduced in Python 2.5.
The author Wesley J. Chun has been a former employee at Yahoo and has played a major role in creating Yahoo Mail and Yahoo People Search using Python. He has over 20 years of experience in the IT field with over a decade of experience programming in Python.
Ravi Kumar likes all things related to open source and free software and enjoys sharing his experiences and thoughts through his blog All about Linux.
You can purchase Core Python Programming - 2nd Edition from bn.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.
On the cheap side ... (Score:5, Informative)
One might try out Alan Gald's fine Learning to Program [freenetpages.co.uk] site. Short on pretty. Long on usefulness.
Oh, and all the thick books in the world will never help a budding python coder more than the tutor mailing list [python.org].
Re: (Score:1)
Re: (Score:2)
Re:On the cheap side ... (Score:4, Informative)
For younger children... (Score:4, Informative)
An interactive (has an immediate mode prompt) language like Python is very helpful for first learning. BASIC used to fill that role, but I like starting with structured concepts. Kids have no problem "getting" that indentation marks blocks.
Some experts hate python because while the grammar is "context free", the lexing isn't. The grammar is defined in terms of INDENT and OUTDENT taking the place of '{' and '}' (or BEGIN and END). However, whether a given indent is an INDENT or OUTDENT depends on context. So you can't use a traditional lexical analyzer when programmatically generating/modifying python code. You have to translate leading whitespace to INDENT and OUTDENT based on lexical context when parsing, and translate INDENT and OUTDENT to the appropriate amount of leading whitespace when pasting code blocks.
Personally, I don't find that this is a problem. Sure 'lex' doesn't work out of the box, but the custom lexing code is pretty trivial. And the indentation sure is intuitive. Maybe that means I'm not an expert.
I highly recommend (Score:1, Informative)
http://www.network-theory.co.uk/python/intro/ [network-theory.co.uk]
This book is only 100 pages long! It was written for Python 2.2.2, but it is perfectly useful for any Python 2.x. This book is amazingly concise, but it is also quite complete. You will get the most ou
Re: (Score:2)
Dive Into Python rules! (Score:2)
Python is easy to learn (Score:1)
python.org (Score:2)
Got and Older Edition (Score:2)
Nice book report (Score:2)
It's no wonder I skip straight to the comments -- these reviews are just about the most content-free section of slashdot.
Re: (Score:1)
I could almost accept the contentless-ness of the "review" if it was at least readable. "Book report" is right, as this reads like it was written by a 4th grader. It's full of run-on sentences, sentence fragments, overly-repeated phrasing ("This book", "The book") and sentence structure, convoluted paragraphs covering multiple unrelated topics, minor spelling and punctuation errors,
My favorite Python joke (Score:2)
A: That joke's not funny.
Re: (Score:1)
portable gui (Score:3, Interesting)
After a year of fiddling with Python, I find I quite like it for some things, and it's not the right fit for other things. That's fine, there's no reason to be rabid pro- or rabid con- about any language.
I happen to use Linux, OSX and Windows, and the number one annoyance for me is a lack of clear "native-looking" GUI or OpenGL toolkit offering that is reachable by scripting languages like Perl and Python.
I'd like to see PyGame in a MacPort. The Images module was pretty easy to build but it should be in MacPorts too. I don't want to rely on X11 when on a Mac, but to use X11 when on Linux, which seems to be like bringing antimatter and matter together in the same universe. A GladeXML-like module that relies only on Aqua would be great.
Similarly on Windows, you're relegated to some fugly Tk choice if you want portable GUI. I can't think of a toolkit that looks less native than Tk, unless you count the early Java Swing "Metal" theme.
The fact that OSX still isn't standardized on python2.4 makes it hard to support python-rich applications like Blender, and we still run into problems where a 2.3 parser can't let scripts use 2.4 features (even smart scripts that try:except: to fall back gracefully). I think Leopard will be python2.4 but don't recall seeing official confirmation on that.
I'm sure I've misstated something technically-- I don't have my notes from home to double-check a few things from my last gui toolkit search a couple weeks ago.
Re:portable gui (Score:4, Informative)
Re: (Score:2)
Re:portable gui (Score:4, Informative)
wxPython [wxpython.org] is native on X11, Windows and Mac OS X.
I used PyOpenGL [sourceforge.net] a few years ago and it was a very pleasant experience. It was easy to translate C examples to Python, without all the annoyances of using C. Obviously you wouldn't want to write a full game engine using Python, but it is nice for experimenting with OpenGL.
Re:portable gui (Score:4, Informative)
QT [trolltech.com] with python bindings PyQt [riverbankcomputing.co.uk] will give you native looking GUI on all three platforms you are interested i.e windows, linux and OSX. Now QT4 is available as GPL even on windows, so its truly "free". QT also comes with QT-designer which IMHO is the best rapid GUI designer app.
Re: (Score:2)
Re: (Score:1)
It uses some form of wrapper program for the SDL surface so it doesn't need X11... Take a look.
Re: (Score:1, Offtopic)
What you're probably looking for there is wxWidgets [wxwidgets.org], which is a sophisticated native wrapper around each of those and has binding for Python, Perl, and the usual motley crew, including .Net and to some extent Java (I think).
It has XRC [wx4j.org] files, which I think is how GUI designers tie into wxWidgets, covering t
Re: (Score:1)
BN is overpriced (Score:3, Informative)
Amazon.com [amazon.com] $32.99
Overstock.com [overstock.com] $31.34
Half.com [ebay.com] $28.95
Re: (Score:2)
use the O'Reilly Pocket Reference first (Score:2)
Re: (Score:1)
If you've got a printer, you can also use my Quick Reference Card (PQRC)
at http://www.limsi.fr/Individu/pointal/python/pqrc/ [limsi.fr]
Re: (Score:2)
Python Tutorial (Score:1)
Chapter 13?!?!? (Score:2)
System requirements for Python web dev seem high (Score:2)
Popular frameworks like TurboGears, or Django, also require mod_python 3.x and apache 2.x.
No problem if you are developing internally, but if you want a hosted solution, I'm not sure if python is practical.
Re:System requirements for Python web dev seem hig (Score:1)
http://code.djangoproject.com/wiki/ServerArrangeme nts [djangoproject.com]
http://docs.turbogears.org/1.0#deployment [turbogears.org]
generally speaking, when you want to run a python web-application, you want to avoid to have to reload the whole application by every request.
because of this, CGI is not suitable, but there are many other ways:
- scgi
- fastcgi
- mod_python
- standalone python http servers (afaik turbogears and zo
WTH?! (Score:1, Troll)
"Python, the dynamic object oriented programming language created by Guido van Rossum is known to deliver both the power and general applicability of traditional compiled languages without the complexities accompanying them."
Sounds like a typical spamvertisement really!
"Coupled with its ease of use"
umm hell, python is notoriously known for bad coders, writing broken applications based on underdeveloped and unmature modules, breaking forward compatibility.
Sadly en
Re: (Score:1)
No, it didn't get picked up and maintained because no one cared enough about the application to pick it up and maintain it. By your argument, no programming languages are possible "to maintain forward" because there are good applications written in all languages that get dropped because the ma
Re: (Score:2)
Re: (Score:2)
Verily? (Score:2)
Bloat, bloat, bloat... (Score:2)
Yawn.
Send the author back when they can get the size down to something the size of K & R while maintaining the same level of usefulness.
Python not easy to use due to reference counting. (Score:2)
Re:Python not easy to use due to reference countin (Score:2)
Yahoo mail..... (Score:2)
- The search function never works as intended (I want to look for messages only in one folder, damnit!).
So assuming this guy is very clever, Python must be broken or too dificult to use.
Re: (Score:3, Insightful)
In this case, would you really care about execution speed? I'll just go for the ease of string/files/array/hashes manipulation, write a powerful script in 10 minutes and go drink a coffee while my script works for me and you're still struggling with your char str[80];.
Re: (Score:2)
Of course I doubt any of them are as easy to use as Python... but I wouldn't mind betting there are some C++ library guru's out here in the
Re: (Score:2)
has been 20 plus years of optimisation going on there, so,
you have got to be a shit hot assembly programer to beat pure
C on speed.
C++ is considerably slower and harder to read ( flambait
The interesting thing is that well written Pyhon applications
run about the same speed as well written Java.
The key phrase here is "well written" and you really do have to
be aware of what pyhon is doing the classic being
python " for x in range(1,1000)"
Re: (Score:1)
> python " for x in range(1,1000)"
> is not the same as C "for (x=1;x1000;x++)"
In place of range(), you should use xrange() [python.org] as it doesn't build up the whole list as range() does.
Re: (Score:2)
Re:Python is (not) SLOW (Score:3, Informative)
Re: (Score:3, Insightful)
It really depends on the application. Python is really easy to use and for applications that aren't cpu/io intensive it could prove better to use over a language such as C just because it's much easier and quicker to put together something relatively small together. However, once the requirements start to grow it's a completely different scenario. As soon as you're going to be writing an application that's going to take a few seconds to execute an operation, then a faster language such as C might be a bette
Re: (Score:2, Informative)
Re: (Score:1)
Another big issue is the memory usage. Man is Python a memory hog! For a list of integers it takes up about 20 bytes per integer! Now you just imagine the processing overhead of managing all that additional data. On top of that it has to go figure out what types are used in b
Re: (Score:2, Informative)
The ICFP contest [icfpcontest.org] allows any language you want. It's once a year, with 3 days to work on the problem. Typically it's a single optimization problem for which a perfect answer is not feasible in terms of computation, so the best heuristic wins.
The Internet Problem Solving Contest [ipsc.ksp.sk] also allows any language, since you only have to submit the output, not the program. It's also once per year. It has multiple problems and you have to solve as many as possible in 5 hours.
Re: (Score:1)
Google Code Jam [topcoder.com] allows Java, C++, C#, VB.NET and . [artima.com]
Re: (Score:2)
For example, in C/C++/Java a switch is often the fastest way to make a multi-choice decision. Python does not have a switch
Re: (Score:1)
Read my post above wrt the use of particular features of Python improving performance.
As for the switch statement in C/Java, it's actually no longer any faster then a bunch of if statements since the modern compilers optimize them to the same machine code. As for Python though it's a different story since it's interpreted. Building up a dictionary might actually be faster, but I would have to test it out first before accepting it as fact.
> OTOH, because Python is so easy to write, it's a lot simpler
Re: (Score:2)
I think you mean that some compilers may optimize a bunch of if statements into jump tables, the same way they've been doing for switch for well over a decade. Python could perhaps do jump table optimization for a switch opcode, but you'd be micro-optimizing something that would either barely benefit or would benefit more from a redes
Re: (Score:2)
Actually, Python is byte-code compiled at run-time. You can see this in action after you run a Python app one time, you will see a
Re: (Score:2)
So, this, for instance, is a Pythonic way of getting multiple return values from function:
def something():
return "Foo", "Bar"
Re: (Score:1)
See "Scripting Language" My Arse: Using Python for Voice over IP
http://www.python.org/pycon/dc2004/papers/6/ [python.org]
Re: (Score:1)
Re: (Score:1)
That is why they allow you to link with components in C. The critical time components can be written in C while the rest can stay Python, if you want. I think python is more useful for prototype design or just quick scripts. I agree it is slow, but it would be faster if someone made a compiler--I think someone did make a JIT one, but for one off things JITC is slow too. Some components don't need to be blazing fast, but an interpeter sucks with slowness.
Re: (Score:3, Insightful)
It *is* a general purpose programming language. Well, it is as well suited to 3d games programming as C is to a web application; and nobody would dare to say C is not a general purpose programming language.
I know you said "all purpose programming language", but then again, for that matter no language is "all purpose"
Re: (Score:1)
Scripting language just means it is interpeted. That is why python is slow. If they made a compiler for python, it would be much faster, though likely not as fast as C.
Re: (Score:2)
Re: (Score:2)
Re: (Score:2)
This works for anything that has a quack function. How does Python figure out that it has such a function? Hash lookup, followed by a function call or an exception being thrown. Compare with
Right.... (Score:2)
Re: (Score:2)
Re: (Score:3, Funny)
Anyway, the whole question is rendered moot by the ability to embed Python in C++ and call C++ libraries from Python. It might seem ironic to you given your preconceptions, but Python brings C++ much closer to being an all-purpo
Re: (Score:1)
Re: (Score:2)
What matters is how fast responses are once forms are submitted.
# Second, as Python is used in games to implement AI, so I guess it isn't THAT slow.
Python is almost always (when used in this circumstance) used to script what happens in game AI, not the AI itself. When Python is used for such coding, performance-critical functions are usually
Re: (Score:2)
You really don't know my users
Re: (Score:2)
Right.... Try applying the "slow user" argument to a server that has to handle thousands of simultaneous requests from said "slow" users.
The user can afford to be slow. The server can't, and if it can't scale you're in deep trouble.
Re: (Score:2)
Meanwhile, I can whip up apps in Python in no time and they run far faster and with less nonsense and hassle. Slower than C? Yes. Better for rapid prototyping and quick problem solving on the fly? Yes. Best language I know to bridge structu
Re: (Score:2)
Do keep up old chap.
Re: (Score:1, Insightful)
Re: (Score:1)
Re:Python is SLOW (Score:5, Interesting)
Also, keep in mind Python does not use a virtual machine at all in the same way Java does -- which means it is somewhat like comparing apples to oranges.
I was a full time J2EE engineer for a while and a recent convert to Python for general programming. The things I noticed are:
- Java is great for large teams of programmers working together across the globe but as good as Python for smaller groups in the same place.
- Python's web frameworks are amazingly fast and very powerful.
- Java is almost text book perfect when it comes to programming. Unlike most other languages kids can come out of university and not have to change hardly anything to get started in the real world of Java.
- It's very rare to see stock Tomcats or even stock JVM's meaning that most (commercial) Java apps send the entire 'Java OS' (VM) with their products.
- Java web apps are very slow on startup, but scale well after the startup time.
- Python has a better RORA system, though Java isn't to far behind.
- Java terminology is very confusing compared to Pythons esp. since it is generally termed by marketers (Java2 is Java1.4 and then we hit Java 5 which is Java1.5
Here is how it seems companies leverage the languages
1. Java
Manager's reason for Java: "I have a large IT infrastructure and want to do enterprise applications with teams across the globe."
Engineer Translation for Java: "I have an over all large group of engineers and want to make an application designed by the business with at least some of the team out sourced."
2. Python
Manager's reason for Python: "I have a small IT budget and want to agile and business reactive application development."
Engineer Translation for Python "I don't have a budget to get more engineers and the requirements state that we need to be able to change and update the application on the business whim."
In scenario number 1 it is a growing company who wants to hire lots of new engineers so the plus side of using Java is:
1. Just about every engineer (good or bad) knows it
2. It enforces C++ like development cycles
3. If done right, the objects are reusable and simple for an architect to understand
4. You can hire fresh outs
In scenario number 2 it's a growing company who is not investing more money in the IT department but expects better results for the buck put into it. The plus side of Python would be:
1. It's a RAAG language (read at a glance) which means you can skim through the code quite quickly without needing tracers or debuggers.
2. By design each engineer is a mini architect
3. If done right, the objects are reusable and simple for engineers to grasp quickly
4. The quality of engineers you get tend to be quite high since most Python engineers are converts from other languages with X years of experience in the field. (though it also means you can't hire as quickly).
Bottom line there is no right or wrong answer as to which is better or faster. Python is faster in some cases and Java is faster in others and it largely depends on how you run your business and the money that you want to spend in IT as to which one would help your company.
Re: (Score:2)
This is awfully debatable. The explicit static typing and ease of static analysis makes error-checking much easier in Java, which makes for much easier QA if you don't like testing. Java also have very good IDEs, which it doesn't deserve. But the verboseness of Java and it's lack of many (syntactic or other) niceness such as first-class-object functions, tuple-unpackin
Re: (Score:2)
Python has a pile of MVC frameworks with 99% overlapping functionality but little else. Show me Python's answer to JSF, Tapestry, or Wicket.
Re: (Score:2)
I guess Zope is pretty close, but I don't know what to make of Zope. Zope3 seems to be doing its darndest to keep itself obscure, and
Re: (Score:2, Informative)
...and it need not be said.
Between Pyrex [canterbury.ac.nz] and Psyco [sourceforge.net], there's really very, very few applications that a language like Python isn't appropriate for. Premature optimization is the far more common programmer sin these days than choosing a language that's "too slow." Except for a few, specific application domains (that only a minority of coders are writing) dynamic languages like python are an excellent choice on today's hardware. And if you need it to be faster, just profile, find the couple of spots that m
Re: (Score:2)
Re: (Score:2)
Re: (Score:2, Insightful)
The key to
Ruby is SLOWER (Score:3, Funny)
Re: (Score:1)
Re: (Score:2, Interesting)
Matplot is slow (Score:2)
Re: (Score:1)
Ruby is easily, measurably, slower than Python - its a big topic of discussion in the Ruby community and the subject of numerous projects to address.
Re: (Score:2)
Re:Python is SLOW (Score:5, Informative)
Really? hmmm, my team runs a huge data warehouse in which all data is transformed via python programs. This means 40+ million rows a day get hash table lookups, business rule validations, type changes and various transformations.
Then most of that data goes through an additional metadata-driven validation process that checks and confirms every single field. Again, metadata-driven - so a oouple hundred lines of various hash table lookups to determine exactly what validation applied to each field.
Ok, now let's talk performance:
1. io performance (most critical factor here)
a. same as c, in other words, extremely fast
2. cpu performance
a. much slower than c, but workable
b. psycho helps a ton
c. the ability to rewrite key functions and classes is cool
Let's also talk about productivity
1. great for ease in training part-time or junior programmers
2. great for immediately understanding old code
3. great for writing robust test-driven code
4. good for very quickly assembling a solution
The above combo of ease of writing, ease of maintaining puts it far ahead of perl, tcl and java. Ruby is really the one other one in this niche I can think of off the top of my head. And even there Python appears stronger on the maintenance side.
So, yeah - I'm sure there are many applications that have more significant performance requirements than ours does. But for this large application it is completely fine.
Re: (Score:2)
1. ETL (extract/transform/load) processing in which source data is translated to the warehouse format. This consists of several components:
a. python-based etl framework - responsible for managing our processing queues. This code takes a decentralized approach quite different than most commercial etl tools - that are large and awkward monolithic applications. This has worked very well.
b. python-based transformation - typically simple custom-written programs that read a
Re: (Score:2)
That simple stupidity just made everyone who knows anything about Ruby and Python dismiss your post as utter nutjobbery.
Java is indeed faster than Python by a large margin (unless the runtimes are short, in which case the sheer monstruosity of the JVM's startup time kills Java's perfs).
TCL compares very favourably to Python, even though it's mostly slightly slower, unless you're using Regexp (the Tcl regex engine is just wicked fast).
But Ruby on the other hand,
Re: (Score:1)
This is why there is so much interest in a Python compilier--compiliers are much faster than interpeters. There are some starting projects--such as psycho and Python 2 C Module Generator [sourceforge.net]
Java and TCL have certainly had many more years and manpower to optimize thier implementations. I don't know much about Ruby. I'm sure in a few years, Python will improve too.
Re: (Score:3, Interesting)
Regarding the indentation-as-syntax, consider the following C code, where someone tried to add the baz() function to a loop:
while (foo())
bar();
baz();
This code has an obvious bug. Baz() is not in the loop body, because the braces are missing. It's obvious from the indentation that that was the coder's intention. Why does one need an
Re: (Score:2)
Re: (Score:1)
So many editors switch tabs/spaces freely which creates problems with indentation syntax. Because of python and make, I have reverted to using e3 as an editor. I like that it is small and simple, but it does not have anything fancy like syntax highlighting. For programming syntax highlighting helps a lot. I used jed before and loved it, but it mucks with spaces and tabs, so python and make wouldn't work. Yeah, I think you can change the settings to make it work, but it is a huge pain in the ass.
Re: (Score:3, Interesting)
<pre>print '%(imperative)s, a %(adjective)s %(noun)s!' % {'imperative': 'Look!', 'adjective': 'built-in', 'noun': 'templating system'}</pre>
Re: (Score:2, Interesting)
>>> spam = {}
>>> spam['eggs'] = 'some eggs'
>>> spam['beans'] = 'beans!'
>>> 'The eggs: %(eggs)s' % spam
'The eggs: some eggs'
>>> 'Everything in spam: %s' % ', '.join(spam)
'Everything in spam: eggs, beans'