首页 > 解决方案 > TypeError: unsupported operand type(s) for -: 'tuple' and 'int' : 为什么我不能直接减去两个函数?

问题描述

我正在尝试计算两个函数输出的差异。我之前学过java,在java中,直接用一个函数减去另一个函数是可以的。有人能告诉我为什么我不能在 python 中做同样的事情吗?仅仅是因为 python 不能这样做还是因为我不能用 int 类型减去一个元组?

from numba import jit
import numpy as np
import time


@jit
def foo(x: int, y: int) ->float:
    tt = time.time()
    s = 0
    for i in range(x,y):
           s += i
    print("Time used: {} sec".format(time.time() - tt))
    return s


print("value of foo", foo(1, 1000))


def foo2(x, y)->float:
    tt = time.time()
    s = 0
    for i in range(x, y):
       s += i
    print("Time used for foo2: {} sec".format(time.time() - tt))
    return s


print("value of foo2", foo2(1, 1000))

a= foo(1, 1000)
b= foo2(1, 1000)
print (a-b)
print(type(a))
print(type(b))
print(type(foo2((1, 1000)-foo(1, 1000))))

例外:获取两个不同函数的输出差异的浮点数

实际的:

Traceback (most recent call last):
Time used: 0.03690075874328613 sec
  File "C:\Users\Administrator\PycharmProjects\untitled1\numbaTester.py", 
line 35, in <module>
value of foo 499500
print(type(foo2((1, 1000)-foo(1, 1000))))
Time used for foo2: 0.0 sec
TypeError: unsupported operand type(s) for -: 'tuple' and 'int'
value of foo2 499500
Time used: 0.0 sec
Time used for foo2: 0.0 sec
0
<class 'int'>
<class 'int'>
Time used: 0.0 sec

标签: python-3.x

解决方案


您的语法不正确,您的最后一个打印语句中有一个额外的括号。

如果将其更改为print(foo2(1, 1000) - foo(1, 1000)),您将看到可以减去这些函数(或者print(type(foo2(1, 1000) - foo(1, 1000)))如果您只想查看输出类型而不是类似于您最初尝试的结果,则可以将其更改为)。


推荐阅读