python的简单问题 函数的返回值

求问:初学python的简单问题 函数的返回值
我想用return一次性返回两个值 为什么出错?如何改?
#代码:

python
a,b=input('input a and b with blank:').split(",")
print(a,b)
def xyz(a,b):
    return a+b,a-b
r=xyz(a,b)
print(r)

#出错提示

Traceback (most recent call last):
  File "D:\py_nextwork\demo2\demo_3.py", line 198, in <module>
    r=xyz(a,b)
      ^^^^^^^^
  File "D:\py_nextwork\demo2\demo_3.py", line 197, in xyz
    return a+b,a-b
               ~^~
TypeError: unsupported operand type(s) for -: 'str' and 'str'

字符串不支持相减,相加是可以的

问题描述:在Python中,当使用函数返回多个值时,如果函数内的操作不当,可能会出现类型错误的问题。

原因:在函数xyz中,输入的a和b是字符串类型,而在return语句中,使用了加法和减法运算符。因此,Python无法对两个字符串类型的变量执行加法和减法运算。

解决方法:将输入的a和b转换为整数或浮点数类型,以便进行加法和减法运算。可以使用int()或float()函数将字符串转换为整数或浮点数。修改后的代码如下所示:

a, b = input('input a and b with blank:').split(",")
print(a, b)

def xyz(a, b):
    a = int(a) //转换类型为int
    b = int(b) //转换类型为int
    return a+b, a-b

r = xyz(a, b)
print(r)


可以优化代码:可以在函数定义时指定参数类型,以避免在函数内部出现类型错误。可以使用类型提示或assert语句来实现。修改后的代码如下所示:

def xyz(a: int, b: int) -> tuple[int, int]:
    assert isinstance(a, int) and isinstance(b, int), "a and b must be integers."
    return a+b, a-b


这样,在函数调用时,如果输入的参数类型不是整数,会抛出AssertionError异常,从而避免了类型错误的问题。

input得到的是字符串
split之后得到一个list,里面的元素依然是字符串
字符串相加是拼接,不是加法,字符串不支持相减
所以你应该改为return int(a)+int(b),int(a)-int(b)