我在Python中运行一个非常简单的示例,但是我遇到了一些错误。 当我运行这段代码时:
lst = [1, 3, 4, 6, 7]
maxLSt = max(lst)
print(maxLSt)
我收到此错误:
maxLSt = max(lst)
TypeError: max() takes exactly 2 arguments (1 given)
这个问题的原因是什么?
答案 0 :(得分:1)
当你做了
from audioop import max
您明确告诉Python,名称max
是指max
中的audioop
。你不可能有一个名称引用两个不同的东西,所以内置的max
函数变成了"蒙面"或者"阴影"来自audioop
的那个。屏蔽的函数对象仍然可以通过其全名__builtins__.max
访问,但我们通常避免使用内置对象的全名,因为它们只是使代码看起来混乱,但它们在紧急情况下很方便,和其他特殊情况。
避免名称冲突的方法是使用最简单的import
语句形式:
import audioop
然后您可以使用完全限定名称max
访问它的audioop.max
函数。如果您想经常使用模块中的名称而不想输入其全名,则在导入模块时可以给模块一个简短的名称,例如:
import audioop as au
然后您使用max
引用它的au.max
功能。
我建议你阅读官方Python教程中关于Python Scopes and Namespaces的部分。事实上,阅读整个教程是一个好主意。它不针对那些对编程完全陌生的人,它假设你已经拥有一些编码经验(最好是在C / C ++ / Java系列中),所以你不应该觉得它太简单了。 :)
我还建议你阅读这篇文章:Facts and myths about Python names and values,由SO资深人士Ned Batchelder撰写。这是对Python数据模型的一个很好的解释,它与你在Java中习惯的工作方式完全不同。可以在Other languages have "variables", Python has "names"找到这些基本想法的简短摘要,以及漂亮的图表。
答案 1 :(得分:0)
您的代码运行正常。这是整个计划还是大计划的一部分。如果是这样,请提供整个代码。
如果它是整个程序,您应该尝试Restarting your Kernel.
答案 2 :(得分:0)
这是我刚刚在互联网上找到的卸载导入的东西,希望这样做就行了
import gc, sys
print len(gc.get_objects())
# Attempt to unload the module
import audioop
del sys.modules["audioop"]
audioop = None
gc.collect()
print len(gc.get_objects())