diff --git a/Misc/FAQ b/Misc/FAQ index 76becaa86c8..11f38a53296 100644 --- a/Misc/FAQ +++ b/Misc/FAQ @@ -6,8 +6,8 @@ Reply-to: guido@cwi.nl (Guido van Rossum) Approved: news-answers-request@MIT.Edu Archive-name: python-faq/part1 -Version: 1.3 -Last-modified: 26 Jan 1994 +Version: 1.4 +Last-modified: 2 Feb 1994 This article contains answers to Frequently Asked Questions about Python (an object-oriented interpreted programming language -- see @@ -83,26 +83,39 @@ Here's an overview of the questions per chapter: find anything wrong with them. 3.4. Q. I get an OverflowError on evaluating 2*2. What is going on? 3.5. Q. Trouble building Python 0.9.9 or earlier on platform X. - 3.6. Q. Trouble building Python 1.0.0 on platform X. + 3.6. Q. Link errors building Python with STDWIN on SGI Irix. + 3.7. Q. Link errors for dlopen, dlsym, dlerror from import.o. + 3.8. Q. Link errors after rerunning the configure script. + 3.9. Q. The python interpreter complains about options passed to a + script (after the script name). + 3.10. Q. When building on the SGI, make tries to run python to create + glmodule.c, but python hasn't been built or installed yet. + 3.11. Q. Intermittent core dumps and complaints about perfectly valid + argument lists to built-in functions (e.g. posix.stat(filename) says + "no arguments needed"). + 3.12. Q. Trouble building Python 1.0.0 on NeXT. + 3.13. Q. Other trouble building Python 1.0.0 on platform X. 4. Programming in Python - 4.1. Q. Can I create an object class with some methods implemented in + 4.1. Q. Is there a source code level debugger with breakpoints, step, + etc.? + 4.2. Q. Can I create an object class with some methods implemented in C and others in Python (e.g. through inheritance)? (Also phrased as: Can I use a built-in type as base class?) - 4.2. Q. I assign to a variable in a call to exec() but when I try to - use it on the next line I get an error. What is going on? - 4.3. Q. Why does that work? - 4.4. Q. Is there a curses/termcap package for Python? - 4.5. Q. Is there an equivalent to C's onexit() in Python? - 4.6. Q. When I define a function nested inside another function, the + 4.3. Q. Is there a curses/termcap package for Python? + 4.4. Q. Is there an equivalent to C's onexit() in Python? + 4.5. Q. When I define a function nested inside another function, the nested function seemingly can't access the local variables of the outer function. What is going on? How do I pass local data to a nested function? - 4.7. Q. How do I iterate over a sequence in reverse order? - 4.8. Q. My program is too slow. How do I speed it up? - 4.9. Q. When I have imported a module, then edit it, and import it + 4.6. Q. How do I iterate over a sequence in reverse order? + 4.7. Q. My program is too slow. How do I speed it up? + 4.8. Q. When I have imported a module, then edit it, and import it again (into the same Python process), the changes don't seem to take place. What is going on? + 4.9. Q. I have a module in which I want to execute some extra code when it + is run as a script. How do I find out whether I am running as a + script? 5. Extending Python 5.1. Q. Can I create my own functions in C? @@ -363,7 +376,54 @@ LONG_BIT in int_[lr]shift. Please convert to Python 1.0.0 -- it is much more portable. -3.6. Q. Trouble building Python 1.0.0 on platform X. +3.6. Q. Link errors building Python with STDWIN on SGI IRIX. + +A. Rebuild STDWIN, specifying "CC=cc -cckr" in the Makefile. + +3.7. Q. Link errors for dlopen, dlsym, dlerror from import.o. + +A. You are probably using the GNU loader which doesn't understand +dynamic linking. Manually comment out #define HAVE_DLFCN_H from +config.h. (Should be fixed in 1.0.1.) + +3.8. Q. Link errors after rerunning the configure script. + +A. It is generally necessary to run "make clean" after a configuration +change. + +3.9. Q. The python interpreter complains about options passed to a +script (after the script name). + +A. You are probably linking with GNU getopt, e.g. through -liberty. +Don't. (If you are using this because you link with -lreadline, use +the readline distributed with Python instead.) + +3.10. Q. When building on the SGI, make tries to run python to create +glmodule.c, but python hasn't been built or installed yet. + +A. Comment out the line mentioning glmodule.c in Setup and build a +python without gl first; install it or make sure it is in your $PATH, +then edit the Setup file again to turn on the gl module, and make +again. You don't need to do "make clean"; you do need to run "make +Makefile" in the Modules subdirectory (or just run "make" at the +toplevel). + +3.11. Q. Intermittent core dumps and complaints about perfectly valid +argument lists to built-in functions (e.g. posix.stat(filename) says +"no arguments needed"). + +A. You are probably using instead of , or the +other way around. It may also be that your or +does not match the code generated by your compiler. In simple cases, +it may help to turn comment out the #define HAVE_STDARG_H from the +generated config.h. + +3.12. Q. Trouble building Python 1.0.0 on NeXT. + +A. Manually add #define _POSIX_SOURCE to config.h. (Should be fixed +in 1.0.1.) + +3.13. Q. Other trouble building Python 1.0.0 on platform X. A. Please email the details to and I'll look into it. @@ -371,7 +431,15 @@ A. Please email the details to and I'll look into it. 4. Programming in Python ======================== -4.1. Q. Can I create an object class with some methods implemented in +4.1. Q. Is there a source code level debugger with breakpoints, step, +etc.? + +A. Yes. Check out module pdb; pdb.help() prints the documentation (or +you can read it as Lib/pdb.doc). If you use the STDWIN option, +there's also a windowing interface, wdb. You can write your own +debugger by using the code for pdb or wdb as an example. + +4.2. Q. Can I create an object class with some methods implemented in C and others in Python (e.g. through inheritance)? (Also phrased as: Can I use a built-in type as base class?) @@ -397,30 +465,7 @@ wrapper around a built-in object, e.g. (for dictionaries): def values(self): return self.data.values() def has_key(self, key): return self.data.has_key(key) -4.2. Q. I assign to a variable in a call to exec() but when I try to -use it on the next line I get an error. What is going on? - -A. The reason why this occurs is too complicated to explain (but see -the next question). To fix it is easy, however: simply assign None to -the variable *before* calling exec(). This will be fixed in the 1.0 -release. - -4.3. Q. Why does that work? - -A. When parsing your program and converting it into internal pseudo -code, the interpreter does some optimizations to speed up function -execution: it figures out the names of all the local variables and -treats them specially. Because your assignment is done by exec(), it -is not seen initially by the parser and the variable is not recognized -as a local variable. The default treatment is as a global variable, -but the exec() statement places it in the local scope, where it is not -found. This will be fixed in release 1.0 by making exec into a -statement; the parser will then be able to switch off the -optimizations for local variables if it encounters an exec statement -(recognizing calls to built-in functions is not possible for the -parser, hence the syntax change to a statement). - -4.4. Q. Is there a curses/termcap package for Python? +4.3. Q. Is there a curses/termcap package for Python? A. No, but you can use the "alfa" (== character cell) version of STDWIN. (STDWIN == Standard Windows, a portable windowing system @@ -428,13 +473,13 @@ interface by the same author, URL ftp://ftp.cwi.nl/pub/stdwin.) This will also prepare your program for porting to windowing environments such as X11 or the Macintosh. -4.5. Q. Is there an equivalent to C's onexit() in Python? +4.4. Q. Is there an equivalent to C's onexit() in Python? A. Yes, if you import sys and assign a function to sys.exitfunc, it will be called when your program exits, is killed by an unhandled exception, or (on UNIX) receives a SIGHUP or SIGTERM signal. -4.6. Q. When I define a function nested inside another function, the +4.5. Q. When I define a function nested inside another function, the nested function seemingly can't access the local variables of the outer function. What is going on? How do I pass local data to a nested function? @@ -457,7 +502,7 @@ method of an instance of that class, e.g.: print twice(10) # Output: 20 -4.7. Q. How do I iterate over a sequence in reverse order? +4.6. Q. How do I iterate over a sequence in reverse order? A. If it is a list, the fastest solution is @@ -505,7 +550,7 @@ You can now simply write: Unfortunately, this solution is slowest of all, due the the method call overhead... -4.8. Q. My program is too slow. How do I speed it up? +4.7. Q. My program is too slow. How do I speed it up? A. That's a tough one, in general. There are many tricks to speed up Python code; I would consider rewriting parts in C only as a last @@ -520,7 +565,7 @@ your program is spending most of its time (if you have some patience -- the profiling itself can slow your program down by an order of magnitude). -4.9. Q. When I have imported a module, then edit it, and import it +4.8. Q. When I have imported a module, then edit it, and import it again (into the same Python process), the changes don't seem to take place. What is going on? @@ -541,6 +586,18 @@ modules containing statements like will continue to work with the old version of the objects imported thus. +4.9. Q. I have a module in which I want to execute some extra code when it +is run as a script. How do I find out whether I am running as a +script? + +A. A module can find out its own module name by alooking at the +(predefined) global variable __name__. If this has the value +'__main__' you are running as a script. E.g. if you put the following +on the last line of your module, main() is called only when your +module is running as a script: + + if __name__ == '__main__': main() + 5. Extending Python =================== @@ -548,9 +605,9 @@ thus. 5.1. Q. Can I create my own functions in C? A. Yes, you can create built-in modules containing functions, -variables, exceptions and even new types in C. This is all explained -in the file "python/misc/EXTENDING". Also read the file "DYNLOAD" -there for hints on how to load such extension modules +variables, exceptions and even new types in C. This is explained in +the document "Extending and Embedding the Python Interpreter" (the +LaTeX file Doc/ext.tex). Also read the chapter on dynamic loading. 5.2. Q. Can I create my own functions in C++?