Scope

Steven Bethard steven.bethard at gmail.com
Sat Jun 4 17:38:31 EDT 2005


Peter Dembinski wrote:
> AFAIK inc is builtin function.  And builtin functions doesn't have to
> be real functions, they can be just aliases to Python's VM bytecodes
> or sets of bytecodes.

Wrong on both counts. ;)

py> inc
Traceback (most recent call last):
   File "<interactive input>", line 1, in ?
NameError: name 'inc' is not defined
py> __builtins__.inc
Traceback (most recent call last):
   File "<interactive input>", line 1, in ?
AttributeError: 'module' object has no attribute 'inc'

There is no builtin 'inc'.  To verify, check:
     http://docs.python.org/lib/built-in-funcs.html
     http://docs.python.org/lib/non-essential-built-in-funcs.html


And while builtin functions may not have to be real *functions*, they do 
have to be real *callables*:

py> type(abs)
<type 'builtin_function_or_method'>
py> help(type(abs))
Help on class builtin_function_or_method in module __builtin__:

class builtin_function_or_method(object)
  |  Methods defined here:
  |
  |  __call__(...)
  |      x.__call__(...) <==> x(...)
...
py> type(bool)
<type 'type'>
py> help(type(bool))
Help on class type in module __builtin__:

class type(object)
  |  type(object) -> the object's type
  |  type(name, bases, dict) -> a new type
  |
  |  Methods defined here:
  |
  |  __call__(...)
  |      x.__call__(...) <==> x(...)
...

Note that both <type 'builtin_function_or_method'> and <type 'type'> 
have a __call__ method, which means they are callable objects.  They're 
not just bytecodes; they're real objects, just like everything else in 
Python. =)

STeVe



More information about the Python-list mailing list