mirror of
https://github.com/python/cpython.git
synced 2025-11-01 18:51:43 +00:00
Removed some obsolete questions and references to version 1.2.
Added some cross refs about broken lambda and broken recursion of nested functions.
This commit is contained in:
parent
daed771fbb
commit
8727df4623
1 changed files with 159 additions and 231 deletions
390
Misc/FAQ
390
Misc/FAQ
|
|
@ -9,8 +9,8 @@ Approved: news-answers-request@MIT.Edu
|
|||
|
||||
Archive-name: python-faq/part1
|
||||
Submitted-by: Guido van Rossum <guido@cnri.reston.va.us>
|
||||
Version: 1.33
|
||||
Last-modified: 6 September 1996
|
||||
Version: 1.34
|
||||
Last-modified: 9 September 1996
|
||||
|
||||
This article contains answers to Frequently Asked Questions about
|
||||
Python (an object-oriented interpreted programming language -- see
|
||||
|
|
@ -76,21 +76,18 @@ Here's an overview of the questions per chapter:
|
|||
1.13. Q. How do I get a beta test version of Python?
|
||||
1.14. Q. Are there copyright restrictions on the use of Python?
|
||||
1.15. Q. Why was Python created in the first place?
|
||||
1.16. Q. What happened to Tim Peters (the author of python-mode.el, and many
|
||||
entertaining and enlightening pieces of Python email)?
|
||||
|
||||
2. Python in the real world
|
||||
2.1. Q. How many people are using Python?
|
||||
2.2. Q. Have any significant projects been done in Python?
|
||||
2.3. Q. Are there any commercial projects going on using Python?
|
||||
2.4. Q. How stable is Python?
|
||||
2.5. Q. When will the next version be released?
|
||||
2.6. Q. What new developments are expected for Python in the future?
|
||||
2.7. Q. Is it reasonable to propose incompatible changes to Python?
|
||||
2.8. Q. What is the future of Python?
|
||||
2.9. Q. What is the PSA, anyway?
|
||||
2.10. Q. How do I join the PSA?
|
||||
2.11. Q. What are the benefits of joining the PSA?
|
||||
2.5. Q. What new developments are expected for Python in the future?
|
||||
2.6. Q. Is it reasonable to propose incompatible changes to Python?
|
||||
2.7. Q. What is the future of Python?
|
||||
2.8. Q. What is the PSA, anyway?
|
||||
2.9. Q. How do I join the PSA?
|
||||
2.10. Q. What are the benefits of joining the PSA?
|
||||
|
||||
3. Building Python and Other Known Bugs
|
||||
3.1. Q. Is there a test set?
|
||||
|
|
@ -102,24 +99,23 @@ Here's an overview of the questions per chapter:
|
|||
script (after the script name).
|
||||
3.5. 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.6. Q. Python built with gcc for the DEC Alpha doesn't work.
|
||||
3.7. Q. I use VPATH but some targets are built in the source directory.
|
||||
3.8. Q. Trouble building or linking with the GNU readline library.
|
||||
3.9. Q. Trouble building Python on Linux.
|
||||
3.10. Q. Trouble with socket I/O on Linux.
|
||||
3.11. Q. Trouble with prototypes on Ultrix.
|
||||
3.12. Q. Trouble with posix.listdir on NeXTSTEP 3.2.
|
||||
3.13. Q. Other trouble building Python on platform X.
|
||||
3.14. Q. How to configure dynamic loading on Linux.
|
||||
3.15. Q. Under Solaris 2.x, using GCC, how do I use shared libraries?
|
||||
3.16. Q. Errors when linking with a shared library containing C++ code.
|
||||
3.17. Q. Tk menus or radiobuttons don't work properly in Python 1.2.
|
||||
3.18. Q. I built with tkintermodule.c enabled but get "Tkinter not found".
|
||||
3.19. Q. I built with Tk 4.0 but Tkinter complains about the Tk version.
|
||||
3.20. Q. Tk doesn't work right on DEC Alpha.
|
||||
3.21. Q. Several common system calls are missing from the posix module.
|
||||
3.22. Q. ImportError: No module named string, on MS Windows.
|
||||
3.23. Q. Core dump on SGI when using the gl module.
|
||||
3.6. Q. I use VPATH but some targets are built in the source directory.
|
||||
3.7. Q. Trouble building or linking with the GNU readline library.
|
||||
3.8. Q. Trouble with socket I/O on older Linux 1.x versions.
|
||||
3.9. Q. Trouble with prototypes on Ultrix.
|
||||
3.10. Q. Trouble with posix.listdir on NeXTSTEP 3.2.
|
||||
3.11. Q. Other trouble building Python on platform X.
|
||||
3.12. Q. How to configure dynamic loading on Linux.
|
||||
3.13. Q. Errors when linking with a shared library containing C++ code.
|
||||
3.14. Q. I built with tkintermodule.c enabled but get "Tkinter not found".
|
||||
3.15. Q. I built with Tk 4.0 but Tkinter complains about the Tk version.
|
||||
3.16. Q. Link errors for Tcl/Tk symbols when linking with Tcl/Tk.
|
||||
3.17. Q. I configured and built Python for Tcl/Tk but "import Tkinter"
|
||||
fails.
|
||||
3.18. Q. Tk doesn't work right on DEC Alpha.
|
||||
3.19. Q. Several common system calls are missing from the posix module.
|
||||
3.20. Q. ImportError: No module named string, on MS Windows.
|
||||
3.21. Q. Core dump on SGI when using the gl module.
|
||||
|
||||
4. Programming in Python
|
||||
4.1. Q. Is there a source code level debugger with breakpoints, step,
|
||||
|
|
@ -177,6 +173,9 @@ Here's an overview of the questions per chapter:
|
|||
4.35. Q. How do I write a function with output parameters (call by reference)?
|
||||
4.36. Q. Please explain the rules for local and global variables in Python.
|
||||
4.37. Q. How can I have modules that mutually import each other?
|
||||
4.38. Q. How do I copy an object in Python?
|
||||
4.39. Q. How to implement persistent objects in Python? (Persistent ==
|
||||
automatically saved to and restored from disk.)
|
||||
|
||||
5. Extending Python
|
||||
5.1. Q. Can I create my own functions in C?
|
||||
|
|
@ -185,32 +184,29 @@ Here's an overview of the questions per chapter:
|
|||
5.4. Q. How can I evaluate an arbitrary Python expression from C?
|
||||
5.5. Q. How do I extract C values from a Python object?
|
||||
5.6. Q. How do I use mkvalue() to create a tuple of arbitrary length?
|
||||
5.7. Q. What happened to mktuple(), featured in an example in the
|
||||
Extensions manual?
|
||||
5.8. Q. How do I call an object's method from C?
|
||||
5.9. Q. How do I catch the output from print_error()?
|
||||
5.10. Q. How do I access a module written in Python from C?
|
||||
5.11. Q. How do I interface to C++ objects from Python?
|
||||
5.7. Q. How do I call an object's method from C?
|
||||
5.8. Q. How do I catch the output from print_error()?
|
||||
5.9. Q. How do I access a module written in Python from C?
|
||||
5.10. Q. How do I interface to C++ objects from Python?
|
||||
|
||||
6. Python's design
|
||||
6.1. Q. Why isn't there a generic copying operation for objects in Python?
|
||||
6.2. Q. Why isn't there a generic way to implement persistent objects
|
||||
in Python? (Persistent == automatically saved to and restored from
|
||||
disk.)
|
||||
6.3. Q. Why isn't there a switch or case statement in Python?
|
||||
6.4. Q. Why does Python use indentation for grouping of statements?
|
||||
6.5. Q. Why are Python strings immutable?
|
||||
6.6. Q. Why don't strings have methods like index() or sort(), like
|
||||
6.1. Q. Why isn't there a switch or case statement in Python?
|
||||
6.2. Q. Why does Python use indentation for grouping of statements?
|
||||
6.3. Q. Why are Python strings immutable?
|
||||
6.4. Q. Why don't strings have methods like index() or sort(), like
|
||||
lists?
|
||||
6.7. Q. Why does Python use methods for some functionality
|
||||
6.5. Q. Why does Python use methods for some functionality
|
||||
(e.g. list.index()) but functions for other (e.g. len(list))?
|
||||
6.8. Q. Why can't I derive a class from built-in types (e.g. lists or
|
||||
6.6. Q. Why can't I derive a class from built-in types (e.g. lists or
|
||||
files)?
|
||||
6.9. Q. Why must 'self' be declared and used explicitly in method
|
||||
6.7. Q. Why must 'self' be declared and used explicitly in method
|
||||
definitions and calls?
|
||||
6.10. Q. Can't you emulate threads in the interpreter instead of
|
||||
relying on an OS-specific thread implementation?
|
||||
6.11. Q. Why can't lambda forms contain statements?
|
||||
6.8. Q. Can't you emulate threads in the interpreter instead of
|
||||
relying on an OS-specific thread implementation?
|
||||
6.9. Q. Why can't lambda forms contain statements?
|
||||
6.10. Q. Why don't lambdas have access to variables defined in the
|
||||
containing scope?
|
||||
6.11. Q. Why can't recursive functions be defined inside other functions?
|
||||
6.12. Q. Why is there no more efficient way of iterating over a dictionary
|
||||
than first constructing the list of keys()?
|
||||
6.13. Q. Can Python be compiled to machine code, C or some other language?
|
||||
|
|
@ -275,17 +271,23 @@ the TV series or of a can of SPAM :-)
|
|||
|
||||
A. The latest complete Python source distribution is always available
|
||||
by anonymous ftp, e.g.
|
||||
<URL:ftp://ftp.python.org/pub/python/src/python1.2.tar.gz>. It is a
|
||||
<URL:ftp://ftp.python.org/pub/python/src/python1.3.tar.gz>. It is a
|
||||
gzipped tar file containing the complete C source, LaTeX
|
||||
documentation, Python library modules, example programs, and several
|
||||
useful pieces of freely distributable software. This will compile and
|
||||
run out of the box on most UNIX platforms. (See section 7 for
|
||||
non-UNIX information.)
|
||||
|
||||
Sometimes beta versions of a newer release are available; check the
|
||||
subdirectory "beta" of the above-mentioned URL (i.e.
|
||||
<URL:ftp://ftp.python.org/pub/python/src/beta/>). (At the time of
|
||||
writing, beta3 for Python 1.4 is available there, and should be
|
||||
checked before reporting problems with version 1.3.)
|
||||
|
||||
Occasionally a set of patches is issued which has to be applied using
|
||||
the patch program. These patches are placed in the same directory,
|
||||
e.g. <URL:ftp://ftp.python.org/pub/python/src/patch1.1.1>. (At the time
|
||||
of writing, no patches exist for 1.2.)
|
||||
of writing, no patches exist.)
|
||||
|
||||
An index of said ftp directory can be found in the file INDEX. An
|
||||
HTML version of the index can be found in the file index.html,
|
||||
|
|
@ -431,9 +433,9 @@ releases. Note that in the past, patches have added significant
|
|||
changes; in fact the changeover from 0.9.9 to 1.0.0 was the first time
|
||||
that either A or B changed!
|
||||
|
||||
Beta versions have an additional suffix of "-beta-N" for some small
|
||||
number N. Note that (for instance) all versions labeled 1.2-beta-N
|
||||
*precede* the actual release of 1.2. 1.3b1 is short for 1.3-beta-1.
|
||||
Beta versions have an additional suffix of "betaN" for some small
|
||||
number N. Note that (for instance) all versions labeled 1.4betaN
|
||||
*precede* the actual release of 1.4. 1.4b3 is short for 1.4beta3.
|
||||
|
||||
1.13. Q. How do I get a beta test version of Python?
|
||||
|
||||
|
|
@ -499,20 +501,6 @@ me add many early improvements.
|
|||
- In February 1991, after just over a year of development, I decided
|
||||
to post to USENET. The rest is in the Misc/HISTORY file.
|
||||
|
||||
1.16. Q. What happened to Tim Peters (the author of python-mode.el, and many
|
||||
entertaining and enlightening pieces of Python email)?
|
||||
|
||||
A. He worked at KSR (Kendall Square Research, a start-up building a
|
||||
new kind of massively parallel processor). When KSR folded down a
|
||||
couple of years ago, Tim lost his email access. He hasn't surfaced
|
||||
on the net since then.
|
||||
|
||||
Missing-him-too-ly yours...
|
||||
|
||||
PS: support for Python's Emacs mode (Misc/python-mode.el in the
|
||||
distribution) has been taken up by Barry Warsaw. Questions about it
|
||||
should be mailed to <python-mode@python.org>.
|
||||
|
||||
|
||||
2. Python in the real world
|
||||
===========================
|
||||
|
|
@ -601,20 +589,14 @@ in the early stages of development, in fact new, stable releases
|
|||
(numbered 0.9.x through 1.3) have been coming out roughly every 3 to
|
||||
6 months for the past four years.
|
||||
|
||||
2.5. Q. When will the next version be released?
|
||||
|
||||
A. Version 1.3 is being released on 13 October 1995. It is too early
|
||||
to predict when the next release will be necessary, but you can expect
|
||||
something awesome within half a year!
|
||||
|
||||
2.6. Q. What new developments are expected for Python in the future?
|
||||
2.5. Q. What new developments are expected for Python in the future?
|
||||
|
||||
A. See my Work-In-Progress web page, currently at
|
||||
<URL:http://www.python.org:~guido/WIP.html>, and the pages for the
|
||||
Second Python Workshop (best reached via the Python home page,
|
||||
<URL:http://www.python.org/>). Also follow the newsgroup discussions!
|
||||
|
||||
2.7. Q. Is it reasonable to propose incompatible changes to Python?
|
||||
2.6. Q. Is it reasonable to propose incompatible changes to Python?
|
||||
|
||||
A. In general, no. There are already millions of lines of Python code
|
||||
around the world, so any changes in the language that invalidates more
|
||||
|
|
@ -623,7 +605,7 @@ upon. Even if you can provide a conversion program, there still is
|
|||
the problem of updating all documentation. Providing a gradual
|
||||
upgrade path is the only way if a feature has to be changed.
|
||||
|
||||
2.8. Q. What is the future of Python?
|
||||
2.7. Q. What is the future of Python?
|
||||
|
||||
A. If I knew, I'd be rich :-)
|
||||
|
||||
|
|
@ -642,7 +624,7 @@ committed to improving Python, and my current benefactor, CNRI (see
|
|||
its support of Python and the PSA. In fact, we have great plans for
|
||||
Python -- we just can't tell yet!
|
||||
|
||||
2.9. Q. What is the PSA, anyway?
|
||||
2.8. Q. What is the PSA, anyway?
|
||||
|
||||
A. The Python Software Activity <URL:http://www.python.org/psa/> was
|
||||
created by a number of Python aficionados who want Python to be more
|
||||
|
|
@ -650,7 +632,7 @@ than the product and responsibility of a single individual. It has
|
|||
found a home at CNRI <URL:http://www.cnri.reston.va.us>. Anybody who
|
||||
wishes Python well should join the PSA.
|
||||
|
||||
2.10. Q. How do I join the PSA?
|
||||
2.9. Q. How do I join the PSA?
|
||||
|
||||
A. The full scoop is available on the web, see
|
||||
<URL:http://www.python.org/psa/Joining.html>. Summary: send a check
|
||||
|
|
@ -658,7 +640,7 @@ of at least $50 to CNRI/PSA, 1895 Preston White Drive, Suite 100, in
|
|||
Reston, VA 20191. Full-time students pay $25. Companies can join for
|
||||
a mere $500.
|
||||
|
||||
2.11. Q. What are the benefits of joining the PSA?
|
||||
2.10. Q. What are the benefits of joining the PSA?
|
||||
|
||||
A. Like National Public Radio, if not enough people join, Python will
|
||||
wither. Your name will be mentioned on the PSA's web server.
|
||||
|
|
@ -724,21 +706,14 @@ 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.6. Q. Python built with gcc for the DEC Alpha doesn't work.
|
||||
|
||||
People have reported problems with gcc 2.5.8 up to 2.6.3. The DEC
|
||||
OSF/1 cc compiler does not have these problems so it's likely a gcc
|
||||
bug. The latest news is that this has been fixed in Python 1.2 by a
|
||||
source change (I gave up waiting for a fixed gcc).
|
||||
|
||||
3.7. Q. I use VPATH but some targets are built in the source directory.
|
||||
3.6. Q. I use VPATH but some targets are built in the source directory.
|
||||
|
||||
A. On some systems (e.g. Sun), if the target already exists in the
|
||||
source directory, it is created there instead of in the build
|
||||
directory. This is usually because you have previously built without
|
||||
VPATH. Try running "make clobber" in the source directory.
|
||||
|
||||
3.8. Q. Trouble building or linking with the GNU readline library.
|
||||
3.7. Q. Trouble building or linking with the GNU readline library.
|
||||
|
||||
A. Consider using readline 2.0. Some hints:
|
||||
|
||||
|
|
@ -780,34 +755,18 @@ hack that forces use of the static version of the termcap library.
|
|||
specific problems with the readline library (I don't read this group
|
||||
but I've been told that it is the place for readline bugs).
|
||||
|
||||
3.9. Q. Trouble building Python on Linux.
|
||||
|
||||
A. If you're building Python 1.2, Slackware 2.2 has a buggy bash
|
||||
(version 1.14.3) which breaks a sed script that is used to build
|
||||
Modules/Makefile. Replace /bin/sh with /bin/ash in both makesetup and
|
||||
Makefile.pre.in.
|
||||
|
||||
In 1.1 and 1.1.1, there's a bug in the reference counting logic of
|
||||
ternary pow() which is only tripped by very picky mallocs, like the
|
||||
GNU malloc on Linux. This has been fixed in 1.2. To continue the
|
||||
tests in 1.1(.1), just disable the tests of pow() with three arguments
|
||||
from Lib/test/test_b2.py.
|
||||
|
||||
Apart from this, Python builds and runs fine on most Linux versions
|
||||
(if you run into trouble on an old Linux version, consider upgrading).
|
||||
|
||||
3.10. Q. Trouble with socket I/O on Linux.
|
||||
3.8. Q. Trouble with socket I/O on older Linux 1.x versions.
|
||||
|
||||
A. Once you've built Python, use it to run the regen.py script in the
|
||||
Lib/linux1 directory. Apparently the files as distributed don't match
|
||||
the system headers on some Linux versions.
|
||||
|
||||
3.11. Q. Trouble with prototypes on Ultrix.
|
||||
3.9. Q. Trouble with prototypes on Ultrix.
|
||||
|
||||
A. Ultrix cc seems broken -- use gcc, or edit config.h to #undef
|
||||
HAVE_PROTOTYPES.
|
||||
|
||||
3.12. Q. Trouble with posix.listdir on NeXTSTEP 3.2.
|
||||
3.10. Q. Trouble with posix.listdir on NeXTSTEP 3.2.
|
||||
|
||||
A. (This often manifests itself as a weird error from the
|
||||
compileall.py script run by "make libinstall".)
|
||||
|
|
@ -817,7 +776,7 @@ derived from (an old version of) gcc, its interpretation of the
|
|||
"-posix" switch is different; in this particular case, cc is right and
|
||||
gcc is wrong.
|
||||
|
||||
3.13. Q. Other trouble building Python on platform X.
|
||||
3.11. Q. Other trouble building Python on platform X.
|
||||
|
||||
A. Please email the details to <guido@cnri.reston.va.us> and I'll look
|
||||
into it. Please provide as many details as possible. In particular,
|
||||
|
|
@ -826,71 +785,18 @@ if you don't tell me what type of computer and what operating system
|
|||
what is the matter. If you get a specific error message, please email
|
||||
it to me too.
|
||||
|
||||
3.14. Q. How to configure dynamic loading on Linux.
|
||||
3.12. Q. How to configure dynamic loading on Linux.
|
||||
|
||||
A. There are two answers, depending on whether you are using the new
|
||||
ELF object format or not.
|
||||
A. This is now automatic as long as your Linux version uses the ELF
|
||||
object format (all recent Linuxes do).
|
||||
|
||||
For ELF, this seems to be the procedure (thanks to Martin von Loewis):
|
||||
|
||||
Compile Python to an ELF binary.
|
||||
|
||||
In addition, you have to use the following flags:
|
||||
|
||||
- when linking python: -rdynamic -ldl
|
||||
- when compiling an object that goes into a shared module: -fPIC
|
||||
- when linking a shared module: -shared -ldl
|
||||
|
||||
Furthermore, it appears that some Python releases did not understand
|
||||
that Linux has dynamic linking. Python 1.2 did it right, but you
|
||||
should check wether the generated config.h indicates the use of -ldl
|
||||
(i.e. dlopen, dlsym). Finally, you can load a shared module by saying
|
||||
'use foo'. Make sure the module is in your PYTHONPATH.
|
||||
|
||||
For pre-ELF systems (thanks to Andrew Kuchling):
|
||||
|
||||
Pre-ELF Linux requires that you use the GNU DLD library. The stages
|
||||
of using dynamic libraries on Linux are:
|
||||
|
||||
1) Get dld 3.2.5 from a Linux site. Be careful here; the most
|
||||
recent GNU version is 3.2.3, and doesn't support Linux; be sure to
|
||||
get it from a Linux mirror, not a GNU mirror (3.2.4 should also
|
||||
work). Compile it and install the library libdld.a somewhere; I
|
||||
used /usr/local/lib.
|
||||
|
||||
Suitable URLs for the dld distribution are currently:
|
||||
<URL:ftp://sunsite.unc.edu/pub/Linux/libs/dld-3.2.5.src.tar.gz> and
|
||||
<URL:ftp://tsx-11.mit.edu/pub/linux/sources/libs/dld-3.2.5.src.tar.gz>.
|
||||
There's also a binary distribution of it:
|
||||
<URL:ftp://sunsite.unc.edu/pub/Linux/libs/dld-3.2.5.bin.tar.gz>.
|
||||
|
||||
2) Get Jack Jansen's DL library; its location is given in the
|
||||
_Extending Python_ manual as <URL:ftp://ftp.cwi.nl/pub/dynload/>.
|
||||
Compile it and install libdl.a wherever you put libdld.a.
|
||||
|
||||
3) Run Python's configure script, giving it the --with-dl-dld option,
|
||||
which requires a parameter giving the directory where you put the
|
||||
libraries.
|
||||
|
||||
4) Recompile Python.
|
||||
|
||||
3.15. Q. Under Solaris 2.x, using GCC, how do I use shared libraries?
|
||||
|
||||
A. Use the linker in /usr/ucb/ld, not the GNU linker. The latter
|
||||
cannot create shared libraries.
|
||||
|
||||
3.16. Q. Errors when linking with a shared library containing C++ code.
|
||||
3.13. Q. Errors when linking with a shared library containing C++ code.
|
||||
|
||||
A. Link the main Python binary with C++. Change the definition of
|
||||
LINKCC in Modules/Makefile to be your C++ compiler. You may have to
|
||||
edit config.c slightly to make it compilable with C++.
|
||||
|
||||
3.17. Q. Tk menus or radiobuttons don't work properly in Python 1.2.
|
||||
|
||||
A. There's a bug in Tkinter.py; remove ClassType and InstanceType from
|
||||
the definition of CallableTypes near the top of Lib/tkinter/Tkinter.py.
|
||||
|
||||
3.18. Q. I built with tkintermodule.c enabled but get "Tkinter not found".
|
||||
3.14. Q. I built with tkintermodule.c enabled but get "Tkinter not found".
|
||||
|
||||
A. Tkinter.py (note: upper case T) lives in a subdirectory of Lib,
|
||||
Lib/tkinter. If you are using the default module search path, you
|
||||
|
|
@ -898,7 +804,7 @@ probably didn't enable the line in the Modules/Setup file defining
|
|||
TKPATH; if you use the environment variable PYTHONPATH, you'll have to
|
||||
add the proper tkinter subdirectory.
|
||||
|
||||
3.19. Q. I built with Tk 4.0 but Tkinter complains about the Tk version.
|
||||
3.15. Q. I built with Tk 4.0 but Tkinter complains about the Tk version.
|
||||
|
||||
A. Several things could cause this. You most likely have a Tk 3.6
|
||||
installation that wasn't completely eradicated by the Tk 4.0
|
||||
|
|
@ -909,7 +815,24 @@ have compiled Python with the old tk.h header file (yes, this actually
|
|||
compiles!); you may actually have linked with Tk 3.6 even though Tk
|
||||
4.0 is also around. Similar for Tcl 7.4 vs. Tcl 7.3.
|
||||
|
||||
3.20. Q. Tk doesn't work right on DEC Alpha.
|
||||
3.16. Q. Link errors for Tcl/Tk symbols when linking with Tcl/Tk.
|
||||
|
||||
Quite possibly, there's a version mismatch between the Tcl/Tk header
|
||||
files (tcl.h and tk.h) and the tck/tk libraries you are using (the
|
||||
"-ltk4.0" and "-ltcl7.4" arguments for _tkinter in the Setup file).
|
||||
If you have installed both versions 7.4/4.0 and 7.5/4.1 of Tcl/Tk,
|
||||
most likely your header files are for The newer versions, but the
|
||||
Setup line for _tkinter in some Python distributions references
|
||||
7.4/4.0 by default. Changing this to 7.5/4.1 should take care of
|
||||
this.
|
||||
|
||||
3.17. Q. I configured and built Python for Tcl/Tk but "import Tkinter"
|
||||
fails.
|
||||
|
||||
A. Most likely, you forgot to enable the line in Setup that says
|
||||
"TKPATH=:$(DESTLIB)/tkinter".
|
||||
|
||||
3.18. Q. Tk doesn't work right on DEC Alpha.
|
||||
|
||||
A. You probably compiled either Tcl, Tk or Python with gcc. Don't.
|
||||
For this platform, which has 64-bit integers, gcc is known to generate
|
||||
|
|
@ -921,7 +844,7 @@ far as we know, there are no problem with gcc on other platforms --
|
|||
the instabilities seem to be restricted to the DEC Alpha.) See also
|
||||
question 3.6.
|
||||
|
||||
3.21. Q. Several common system calls are missing from the posix module.
|
||||
3.19. Q. Several common system calls are missing from the posix module.
|
||||
|
||||
A. Most likely, *all* test compilations run by the configure script
|
||||
are failing for some reason or another. Have a look in config.log to
|
||||
|
|
@ -929,7 +852,7 @@ see what could be the reason. A common reason is specifying a
|
|||
directory to the --with-readline option that doesn't contain the
|
||||
libreadline.a file.
|
||||
|
||||
3.22. Q. ImportError: No module named string, on MS Windows.
|
||||
3.20. Q. ImportError: No module named string, on MS Windows.
|
||||
|
||||
A. Most likely, your PYTHONPATH environment variable should be set to
|
||||
something like:
|
||||
|
|
@ -938,7 +861,7 @@ set PYTHONPATH=c:\python;c:\python\lib;c:\python\scripts
|
|||
|
||||
(assuming Python was installed in c:\python)
|
||||
|
||||
3.23. Q. Core dump on SGI when using the gl module.
|
||||
3.21. Q. Core dump on SGI when using the gl module.
|
||||
|
||||
There are conflicts between entry points in the termcap and curses
|
||||
libraries and an entry point in the GL library. There's a hack of a
|
||||
|
|
@ -1250,19 +1173,8 @@ no longer seems to exist. Inquire with Mark Linton.)
|
|||
|
||||
4.14. Q. Are there any interfaces to database packages in Python?
|
||||
|
||||
A. There's an interface to SYBASE by John Redford
|
||||
<jredford@lehman.com>.
|
||||
|
||||
There's an interface to metalbase by Lance Ellinghaus
|
||||
<lance@markv.com>; it is part of the separate Extensions distribution
|
||||
<URL:ftp://ftp.python.org/pub/python/src/extensions.tar.gz>.
|
||||
|
||||
Anthony Baxter <anthony.baxter@aaii.oz.au> has written an interface to
|
||||
mSQL (mini-SQL).
|
||||
<URL:ftp://ftp.python.org/pub/python/contrib/PymSQL.tar.gz>.
|
||||
|
||||
Tom Culliton <culliton@clark.net> has written an Oracle module.
|
||||
See <URL:ftp://ftp.clark.net/pub/culliton/oramod.tgz>.
|
||||
A. There's a whole collection of them in the contrib area of the ftp
|
||||
server, see <URL:http://www.python.org/ftp/python/contrib/Database/>.
|
||||
|
||||
4.15. Q. Is it possible to write obfuscated one-liners in Python?
|
||||
|
||||
|
|
@ -1339,9 +1251,9 @@ but if your Python has been configured to support threads, it is not
|
|||
called (because other threads may still be active). You can define
|
||||
your own cleanup function using sys.exitfunc (see question 4.4).
|
||||
|
||||
- Finally, there are some obscure bugs if your __del__ method does
|
||||
complicated things such as updating dictionaries or lists or
|
||||
references globals. I hope to have fixed these in release 1.2.
|
||||
- Finally, if your __del__ method raises an exception, this will be
|
||||
ignored. Starting with Python 1.4beta3, a warning message is printed
|
||||
to sys.stderr when this happens.
|
||||
|
||||
4.18. Q. How do I change the shell environment for programs called
|
||||
using os.popen() or os.system()? Changing os.environ doesn't work.
|
||||
|
|
@ -1484,9 +1396,9 @@ Hint: the freeze program only works if your script's filename ends in
|
|||
|
||||
4.29. Q. What WWW tools are there for Python?
|
||||
|
||||
A. There's a whole lot in the 1.2 release; see the section on
|
||||
"Internet and WWW" in the Library Reference Manual. Highlights: a CGI
|
||||
parser, a url retriever, an html parser.
|
||||
A. See the chapter titled "Internet and WWW" in the Library Reference
|
||||
Manual. There's also a web browser written in Python, called Grail --
|
||||
see <URL:http://monty.cnri.reston.va.us/grail/>.
|
||||
|
||||
Steve Miale <smiale@cs.indiana.edu> has written a modular WWW browser
|
||||
called Dancer. An alpha version can be FTP'ed from
|
||||
|
|
@ -1730,6 +1642,39 @@ recommended strategy is to avoid all uses of "from <module> import *"
|
|||
Initializations of global variables and class variables should use
|
||||
constants or built-in functions only.
|
||||
|
||||
4.38. Q. How do I copy an object in Python?
|
||||
|
||||
A. There is no generic copying operation built into Python, however
|
||||
most object types have some way to create a clone. Here's how for the
|
||||
most common objects:
|
||||
|
||||
- For immutable objects (numbers, strings, tuples), cloning is
|
||||
unnecessary since their value can't change.
|
||||
|
||||
- For lists (and generally for mutable sequence types), a clone is
|
||||
created by the expression l[:].
|
||||
|
||||
- For dictionaries, the following function returns a clone:
|
||||
|
||||
def dictclone(o):
|
||||
n = {}
|
||||
for k in o.keys(): n[k] = o[k]
|
||||
return n
|
||||
|
||||
- Finally, for generic objects, the "copy" module defines two
|
||||
functions for copying objects. copy.copy(x) returns a copy as shown
|
||||
by the above rules. copy.deepcopy(x) also copies the elements of
|
||||
composite objects. See the section on this module in the Library
|
||||
Reference Manual.
|
||||
|
||||
4.39. Q. How to implement persistent objects in Python? (Persistent ==
|
||||
automatically saved to and restored from disk.)
|
||||
|
||||
A. The library module "pickle" now solves this in a very general way
|
||||
(though you still can't store things like open files, sockests or
|
||||
windows), and the library module "shelve" uses pickle and (g)dbm to
|
||||
create presistent mappings containing arbitrary Python objects.
|
||||
|
||||
|
||||
5. Extending Python
|
||||
===================
|
||||
|
|
@ -1784,12 +1729,7 @@ some value before you pass the tuple to Python code --
|
|||
newtupleobject(n) initializes them to NULL, which isn't a valid Python
|
||||
value.
|
||||
|
||||
5.7. Q. What happened to mktuple(), featured in an example in the
|
||||
Extensions manual?
|
||||
|
||||
A. It's a typo, I meant newtupleobject() (see previous question).
|
||||
|
||||
5.8. Q. How do I call an object's method from C?
|
||||
5.7. Q. How do I call an object's method from C?
|
||||
|
||||
A. Here's a function (untested) that might become part of the next
|
||||
release in some form. It uses <stdarg.h> to allow passing the
|
||||
|
|
@ -1836,13 +1776,11 @@ list, to call a function without arguments, pass "()" for the format,
|
|||
and to call a function with one argument, surround the argument in
|
||||
parentheses, e.g. "(i)".
|
||||
|
||||
5.9. Q. How do I catch the output from print_error()?
|
||||
5.8. Q. How do I catch the output from print_error()?
|
||||
|
||||
A. (Due to Mark Hammond):
|
||||
|
||||
* in Python code, define an object that supports the "write()" method.
|
||||
FWIW, there seems to be a small problem that requires the 'softspace'
|
||||
attribute to be defined too (fixed in 1.2).
|
||||
|
||||
* redirect sys.stdout and sys.stderr to this object.
|
||||
|
||||
|
|
@ -1851,7 +1789,7 @@ work.
|
|||
|
||||
Then, the output will go wherever your write() method sends it.
|
||||
|
||||
5.10. Q. How do I access a module written in Python from C?
|
||||
5.9. Q. How do I access a module written in Python from C?
|
||||
|
||||
A. You can get a pointer to the module object as follows:
|
||||
|
||||
|
|
@ -1870,7 +1808,7 @@ the module) as follows:
|
|||
|
||||
Calling setattr(), to assign to variables in the module, also works.
|
||||
|
||||
5.11. Q. How do I interface to C++ objects from Python?
|
||||
5.10. Q. How do I interface to C++ objects from Python?
|
||||
|
||||
A. Depending on your requirements, there are many approaches. Begin
|
||||
by reading the "Extending and Embedding" document (Doc/ext.tex, see
|
||||
|
|
@ -1904,34 +1842,14 @@ interesting and useful responses.
|
|||
6. Python's design
|
||||
==================
|
||||
|
||||
6.1. Q. Why isn't there a generic copying operation for objects in Python?
|
||||
|
||||
A. Historically, there wasn't. However, starting in Python 1.2,
|
||||
there's a library module "copy" which supports both shallow and deep
|
||||
copying of most common Python objects (though not things like open
|
||||
files, sockets or windows), including an extensible mechanism to copy
|
||||
class instances.
|
||||
|
||||
6.2. Q. Why isn't there a generic way to implement persistent objects
|
||||
in Python? (Persistent == automatically saved to and restored from
|
||||
disk.)
|
||||
|
||||
A. Like the previous question, historically, there wasn't. The
|
||||
library module "pickle" now solves this in a very general way (though
|
||||
you still can't store things like open files, sockests or windows),
|
||||
and the library module "shelve" uses pickle and (g)dbm to create
|
||||
presistent mappings containing arbitrary Python objects. There are
|
||||
some problems with shelve when using gdbm which will be solved in
|
||||
Python 1.3.
|
||||
|
||||
6.3. Q. Why isn't there a switch or case statement in Python?
|
||||
6.1. Q. Why isn't there a switch or case statement in Python?
|
||||
|
||||
A. You can do this easily enough with a sequence of
|
||||
if... elif... elif... else. There have been some proposals for switch
|
||||
statement syntax, but there is no consensus (yet) on whether and how
|
||||
to do range tests.
|
||||
|
||||
6.4. Q. Why does Python use indentation for grouping of statements?
|
||||
6.2. Q. Why does Python use indentation for grouping of statements?
|
||||
|
||||
A. Basically I believe that using indentation for grouping is
|
||||
extremely elegant and contributes a lot to the clarity of the average
|
||||
|
|
@ -1967,7 +1885,7 @@ This is not solely due to the lack of begin/end brackets (the lack of
|
|||
declarations also helps, and the powerful operations of course), but
|
||||
it certainly helps!
|
||||
|
||||
6.5. Q. Why are Python strings immutable?
|
||||
6.3. Q. Why are Python strings immutable?
|
||||
|
||||
A. There are two advantages. One is performance: knowing that a
|
||||
string is immutable makes it easy to lay it out at construction time
|
||||
|
|
@ -1978,7 +1896,7 @@ numbers. No amount of activity will change the value 8 to anything
|
|||
else, and in Python, no amount of activity will change the string
|
||||
"eight" to anything else. (Adapted from Jim Roskind)
|
||||
|
||||
6.6. Q. Why don't strings have methods like index() or sort(), like
|
||||
6.4. Q. Why don't strings have methods like index() or sort(), like
|
||||
lists?
|
||||
|
||||
A. Good question. Strings currently don't have methods at all
|
||||
|
|
@ -1994,7 +1912,7 @@ but others (e.g. sort()) can't, since their interface prescribes that
|
|||
they modify the object, while strings are immutable (see the previous
|
||||
question).
|
||||
|
||||
6.7. Q. Why does Python use methods for some functionality
|
||||
6.5. Q. Why does Python use methods for some functionality
|
||||
(e.g. list.index()) but functions for other (e.g. len(list))?
|
||||
|
||||
A. Functions are used for those operations that are generic for a
|
||||
|
|
@ -2005,7 +1923,7 @@ implementing them as methods for each type. One can quibble about
|
|||
individual cases but it's really too late to change such things
|
||||
fundamentally now.
|
||||
|
||||
6.8. Q. Why can't I derive a class from built-in types (e.g. lists or
|
||||
6.6. Q. Why can't I derive a class from built-in types (e.g. lists or
|
||||
files)?
|
||||
|
||||
A. This is caused by the relatively late addition of (user-defined)
|
||||
|
|
@ -2013,7 +1931,7 @@ classes to the language -- the implementation framework doesn't easily
|
|||
allow it. See the answer to question 4.2 for a work-around. This
|
||||
*may* be fixed in the (distant) future.
|
||||
|
||||
6.9. Q. Why must 'self' be declared and used explicitly in method
|
||||
6.7. Q. Why must 'self' be declared and used explicitly in method
|
||||
definitions and calls?
|
||||
|
||||
A. By asking this question you reveal your C++ background. :-)
|
||||
|
|
@ -2054,7 +1972,7 @@ variables, having to write "self.var" means that references to
|
|||
unqualified names inside a method don't have to search the instance's
|
||||
directories.
|
||||
|
||||
6.10. Q. Can't you emulate threads in the interpreter instead of
|
||||
6.8. Q. Can't you emulate threads in the interpreter instead of
|
||||
relying on an OS-specific thread implementation?
|
||||
|
||||
A. Unfortunately, the interpreter pushes at least one C stack frame
|
||||
|
|
@ -2062,7 +1980,7 @@ for each Python stack frame. Also, extensions can call back into
|
|||
Python at almost random moments. Therefore a complete threads
|
||||
implementation requires thread support for C.
|
||||
|
||||
6.11. Q. Why can't lambda forms contain statements?
|
||||
6.9. Q. Why can't lambda forms contain statements?
|
||||
|
||||
A. Python lambda forms cannot contain statements because Python's
|
||||
syntactic framework can't handle statements nested inside expressions.
|
||||
|
|
@ -2078,6 +1996,16 @@ to invent a name for the function -- but that's just a local variable
|
|||
to which the function object (which is exactly the same type of object
|
||||
that a lambda form yields) is assigned!
|
||||
|
||||
6.10. Q. Why don't lambdas have access to variables defined in the
|
||||
containing scope?
|
||||
|
||||
A. Because they are implemented as ordinary functions. See question
|
||||
4.5 above.
|
||||
|
||||
6.11. Q. Why can't recursive functions be defined inside other functions?
|
||||
|
||||
A. See question 4.5 above.
|
||||
|
||||
6.12. Q. Why is there no more efficient way of iterating over a dictionary
|
||||
than first constructing the list of keys()?
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue