我是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)]
在课程之外,没有任何问题。我想我一定要在这里把事情混在一起...
答案 0 :(得分:3)
仅在__init__
内初始化实例属性是一项PEP8约定。否则,代码将变得混乱无章,难以遵循和调试,尤其是对于那些没有编写代码的人。
您会收到未使用i
的警告,因为您没有使用它。请使用_
,这是抛弃型变量的实际标准,或者使用self.list = [random.randint(min, max)] * range
,但是range
是一个不好的变量名(“ min”和“ max”也是如此),参见第3点。
由于出现TypeError: 'int' object is not callable.
错误,因为您在方法中使用range
自变量覆盖了range
中的内部版本。 min
和max
也是内置函数,不应用于变量名。
答案 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]