0

刚开始玩 BBC micro:bit。其中一个例子有这行代码

flash = [Image().invert()*(i/9) for i in range(9, -1, -1)]

它生成一组图像。为了弄清楚发生了什么,我写了这段代码

class Image:
    def __init__(self,*args):
        print ("init")
        for a in args:
            print (a)

    def invert(self, *args):
        print ("invert")
        for a in args:
            print (a)


flash = [Image().invert()*(i/9) for i in range(9, -1, -1)]

print ( flash )

产生

python3 test.py 
init
invert
Traceback (most recent call last):
  File "test.py", line 14, in <module>
    flash = [Image().invert()*(i/9) for i in range(9, -1, -1)]
  File "test.py", line 14, in <listcomp>
    flash = [Image().invert()*(i/9) for i in range(9, -1, -1)]
TypeError: unsupported operand type(s) for *: 'NoneType' and 'float'

谢谢

4

3 回答 3

0

您的函数 invert 没有返回任何内容,因此当您尝试将其相乘时,您会None*float得到所描述的答案。

于 2020-02-15T16:06:15.530 回答
0

invert()您需要传递一些 int 值并返回任何 int 值。在您的代码中,您没有在invert()函数中返回任何intfloat值。尝试这个

class Image:
    def __init__(self,*args):
        print ("init")
        for a in args:
            print (a)

    def invert(self, *args):
        print ("invert")
        for a in args:
            return a
flash = [Image().invert(1,)*(i/9) for i in range(9, -1, -1)]
print (flash)

这将起作用

于 2020-02-15T16:22:54.013 回答
0

刚刚发现 Image 有一个 * 运算符,即它不是 unpack 运算符,这让我感到困惑。

感谢您的回复

于 2020-02-15T20:47:45.257 回答