Python初学者,我以前使用过搜索,但没有发现问题:
我将3个列表的长度分配给一个变量:
l1 = len(Zeilen1)
我对另外两个称为l2和l3的变量执行此操作,方法与其他两个列表的长度相同。
然后我将变量插入一个名为Laengen:的列表中
Laengen = [l1,l2,l3]
现在我想找到列表的最大值
我试着用各种方法使用max(s)函数,有点让我困惑的是它第一次就起作用了。现在,每次尝试我都会得到这个错误:
类型错误:"int"对象不可调用
当我之前搜索时,我发现int值是不可调用的,因为你通常会调用一个函数,但我不知道我需要什么函数。
还有一个小问题:当我首先声明值为l1、l2、l3=0的列表时,稍后将其他数字分配给这些值,并在列表结束时打印出0,0,0。
列表是否只保留这些值,直到我再次插入它们?
它第一次工作
那么您就有了一些严格意义上是整数的max
值。例如
max = max(some_list) # this works
然后您再次尝试
max(some_list) # this errors... int not callable
当我首先声明值为l1、l2、l3=0的列表时,稍后将其他数字分配给这些值,并在最后打印列表,它将打印0,0,0
您不需要l1,l2,l3
,而是使用列表
Laengen = [0,0,0]
# Laengen[0] = ...
# Laengen[1] = ...
我可以介绍一下,变量调试器:
def debug(*args):
print('Variable debugger output:')
for arg in args:
if arg in ["__builtins__", "inspect", "debug"]:
continue # skip these variables
try:
var = eval(arg)
print('{0}: {1} {2}n'.format(arg, type(var), var))
except (TypeError, NameError):
print('{0}: {1}n'.format(type(arg), arg))
通过debug(*dir())
(示例输出)在程序中的任何点使用:
res: <type 'dict'> {'#label_Bbb': 'hereaswell...', '#labelA': 'thereissomethinghere'}
row: <type 'dict'> {}
sigord: <type 'function'> <function sigord at 0x7fc230710c08>
sigorder: <type 'function'> <function sigorder at 0x7fc230710f50>
slicezip: <type 'function'> <function slicezip at 0x7fc230710938>
sys: <type 'module'> <module 'sys' (built-in)>
test: <type 'list'> [0, 2, 0, 4, 0, 6, 0, 8, 0, 10, 0, 12]
timeit: <type 'module'> <module 'timeit' from '/usr/lib/python2.7/timeit.pyc'>
tup: <type 'tuple'> ((), ())
weird_list: <type 'list'> [[1, 2, [3], 2], [[[3]], 6], 4, 5]
x: <type 'int'> 2
或者对于特定变量debug(max)
:
>>> debug(max)
Variable debugger output:
<type 'builtin_function_or_method'>: <built-in function max>
正如cricket_007所说,如果覆盖max = 5
,则它显示:
>>> max = 5
>>> debug(max)
Variable debugger output:
<type 'int'>: 5
所以,就在你出错之前,放下一个debug(*dir())
,它会向你显示当时的一切。看到结果你可能会感到惊讶。
要在交互式会话中删除本地var,请使用del <var>