为什么我不能在定义中使用循环 'for i in...'? (我没有使用局部变量)

Why can't I use loop 'for i in...' in a definition? (Local Variable i not used)

我是 Python 和编码的新手,正在做一些在线练习。

我正在写一个 class 来制作随机数列表:

class RandomList:
    def create_list(self):
        self.list = []
    def fill_list(self, min, max, range):
        self.list = [random.randint(min, max) for i in range(range)]

首先 --> 我不明白 self.list = [] 下的 Pycharm 警告信息 告诉我:

"Instance attribute list is defined outside init"

如果我写成:

会有什么区别
class RandomList:
    def __init__(self):
        self.list = []

其次 --> 当我调用 RandomList.fill_list:

时,fill_list 函数不起作用

TypeError: 'int' object is not callable.

并且'i'下有一条警告信息:

Local Variable not used

我不明白为什么

我在这里不知所措,因为当我使用例如:

a = [random.randint(min, max) for i in range(range)]

在 class 之外没有任何问题。我想我一定是把事情搞混了...

  1. PEP8 约定只在 __init__ 内初始化实例属性。否则代码会变得一团糟,无法跟踪和调试,尤其是对于没有编写代码的人。

  2. 您会收到未使用 i 的警告,因为您没有使用它。使用 _,这是 throw-away 变量的 de-facto 标准,或使用 self.list = [random.randint(min, max)] * range,但 range 是一个错误的变量名('min'和 'max'),请参阅第 3 点。

  3. 您收到错误 TypeError: 'int' object is not callable.,因为您在方法中使用 range 参数覆盖了 range 中的构建。 minmax 也是 built-in 函数,不应该用于变量名。

这里(range是保留字)

import random 
class RandomList:
    def __init__(self, min, max, _range):
        self.lst = [random.randint(min, max) for i in range(_range)]

rl = RandomList(4,7,10)
print(rl.lst)

输出

[5, 4, 5, 6, 6, 4, 4, 6, 7, 6]

第一:变量名不能与min,max,range一起使用

示例:

range = 4
for i in range(range): #you will get error
    print("Hello!")

您的代码应该是

class RandomList:
    def create_list(self):
        self.list = []
    def fill_list(self, minnum, maxnum, rangenum):
        self.list = [random.randint(minnum, maxnum) for i in range(rangenum)]

你可以用

测试它
randlist = RandomList
randlist.create_list(randlist)
randlist.fill_list(randlist, 1, 5, 3)

print(randlist.list) #prints randomly like [1, 4, 3]