为什么不能在定义中使用循环“ for in in ...”? (我未使用局部变量)

时间:2019-07-15 12:53:26

标签: python for-loop pycharm local-variables

我是Python和编码的新手,可以在线进行一些练习。

我正在写一个用于制作随机数列表的类:

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警告消息 告诉我:

  

“实例属性列表是在 init 之外定义的”

如果我写:

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

第二个-> 当我调用RandomList.fill_list时,fill_list函数不起作用:

  

TypeError:“ int”对象不可调用。

在“ i”下有一条警告消息:

  

未使用局部变量

我不明白为什么

我在这里很茫然,因为当我使用例如:

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

在课程之外,没有任何问题。我想我一定要在这里把事情混在一起...

3 个答案:

答案 0 :(得分:3)

  1. 仅在__init__内初始化实例属性是一项PEP8约定。否则,代码将变得混乱无章,难以遵循和调试,尤其是对于那些没有编写代码的人。

  2. 您会收到未使用i的警告,因为您没有使用它。请使用_,这是抛弃型变量的实际标准,或者使用self.list = [random.randint(min, max)] * range,但是range是一个不好的变量名(“ min”和“ max”也是如此),参见第3点。

  3. 由于出现TypeError: 'int' object is not callable.错误,因为您在方法中使用range自变量覆盖了range中的内部版本。 minmax也是内置函数,不应用于变量名。

答案 1 :(得分:1)

此处(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]

答案 2 :(得分:0)

首先:您不能将变量名与最小,最大,范围一起使用

示例:

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]