【问题标题】:AttributeError: 'list' object has no attributeAttributeError:“列表”对象没有属性
【发布时间】:2021-07-05 08:29:32
【问题描述】:

我尝试通过定义函数方法进行冒泡排序,但它一直显示属性错误。我无法理解原因,所以如果有人能解释这个错误,那将是一个很大的帮助。

l=[1,4,7,9,0]

def kono():
    n=len(l)
    for i in range (n):
        for j in range(n-i-1):
            if(l[j]>l[j+1]):
               l[j],l[j+1]=l[j+1],l[j]
b=l.kono()

print(b)

【问题讨论】:

  • 你认为l.kono() 是什么意思?
  • 它将执行我创建的函数
  • 这不是你在 Python 中调用函数的方式——它是你调用方法的方式——但这个定义不是一个方法。
  • 将函数定义改为def kono(l),调用改为kono(l)
  • 你的预期输出是什么?

标签: python list function attributeerror


【解决方案1】:

改变你的代码,让函数接受一个列表;然后,调用它,使用kono(l) 而不是l.kono();那么不需要将结果分配给b,因为列表是作为引用传递的(函数也不返回任何值):

l=[1,4,7,9,0]

def kono(l):
    n=len(l)
    for i in range (n):
        for j in range(n-i-1):
            if(l[j]>l[j+1]):
               l[j],l[j+1]=l[j+1],l[j]
kono(l)

print(l)

【讨论】:

  • 哦,你的意思是当我将结果调用到 b 时,值没有被分配给它
  • 您的函数中没有return 语句,因此为其分配值将始终产生None 值。在 Python 中,列表(以及一般的对象)作为引用传递,因此在函数内部更改它们会导致它们在外部也发生变化。
  • @ altermetax ,我写了这个简单的代码:def summ(a,b): c = a + ba = 3 b = 5 summ(a,b) print(a,b) 但输出是 3,5
  • 数字是不可变的对象,所以如果你需要值,你确实需要返回它们。
【解决方案2】:

如果您愿意,可以添加退货。一切都取决于你想如何定义你的功能

l=[1,4,7,9,0]

def kono(l):
    n=len(l)
    for i in range (n):
        for j in range(n-i-1):
            if(l[j]>l[j+1]):
                l[j],l[j+1]=l[j+1],l[j]
    return l

b = kono(l)

print('This is b',b)
#Output: This is b [0, 1, 4, 7, 9]

在这种情况下,您会将有序列表分配给b

【讨论】:

    猜你喜欢
    • 2018-01-16
    • 2016-05-14
    • 2016-12-21
    • 2022-01-23
    • 2022-01-23
    • 2019-11-01
    • 2021-08-23
    • 2016-04-22
    • 2019-12-28
    相关资源
    最近更新 更多