Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中使用函数名作为变量_Python - Fatal编程技术网

在python中使用函数名作为变量

在python中使用函数名作为变量,python,Python,我有一个有趣(可能很愚蠢)的想法:如果我使用内置函数名作为变量来分配某个对象(比如整数),会发生什么。以下是我尝试过的: >>> a = [1,2,3,4] >>> len(a) 4 >>> len = 1 >>> len(a) Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: 'int' ob

我有一个有趣(可能很愚蠢)的想法:如果我使用内置函数名作为变量来分配某个对象(比如整数),会发生什么。以下是我尝试过的:

 >>> a = [1,2,3,4]
 >>> len(a)
 4
 >>> len = 1
 >>> len(a)
 Traceback (most recent call last):
   File "<stdin>", line 1, in ?
 TypeError: 'int' object is not callable
>a=[1,2,3,4]
>>>len(a)
4.
>>>len=1
>>>len(a)
回溯(最近一次呼叫最后一次):
文件“”,第1行,是否在中?
TypeError:“int”对象不可调用

python似乎对函数名和变量名没有区别对待。在不重新启动python解释器的情况下,是否有方法将
len
分配回函数?或者撤消分配
len=1

从技术上讲,您可以从
\uuuuuuuuuuuuuu内置

from __builtin__ import len
但是请不要给东西命名
len
,这会让明智的程序员生气

好的,首先不要以内置名命名变量,其次,如果你想尊重其他函数,那么就要尊重名称空间

import time
time.asctime()
asctime = 4253
time.asctime() # Notice that asctime here is unaffected as its inside the time module(s) namespace

使用
dellen

>>> a=[1,2,3,4]
>>> len=15
>>> len(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
>>> del len
>>> len(a)
4
>a=[1,2,3,4]
>>>len=15
>>>len(a)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:“int”对象不可调用
>>>德伦
>>>len(a)
4.
发件人:

删除名称将从本地或全局命名空间中删除该名称的绑定,具体取决于该名称是否出现在同一代码块的全局语句中。如果名称未绑定,将引发NameError异常


我同意我不应该使用
len
作为变量名。但是,如何确保不覆盖在另一个模块中定义的函数名呢。仅导入所需功能是否被视为不好的做法
从时间导入asctime
这样您就可以调用
asctime()
,而无需对其命名,这让我们回到了原点。@fou x86这是一个不错的做法,但python禅宗中的显式>隐式咒语会导致module.function的使用。Python让你有可能射中自己的脚,允许隐藏内置物,因为“我们这里都是同意的成年人”。你可以自己决定。这也是我的建议;如果存在大量名称空间冲突,请不要特别导入内容。Python将函数和方法视为第一类对象,这就是为什么您可以分配给它们并将它们传递给周围的其他函数的原因。确实,Python对函数名和变量名没有不同的处理方式。这是能够将函数用作一级对象的关键,而不必像Ruby的
:func
、Lisp的
'func
等任何操作。实际上,您不会覆盖它,而是屏蔽它。只需删除新的
len
变量,即可取消对内置名称的屏蔽。无需从
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu导入。顺便说一句,我的vim编辑器的颜色内置名称不同,因此,如果我使用内置名称,我的编辑器总是会提醒我。如果您这样做,许多IDE都会警告您(请阅读Eclipse+pydev、pycharm,可能还有其他)