Python tuple与逗号 —— (1,) VS (1)有区别吗?

在这里插入图片描述

(1,) VS (1)有区别么?

在 《Python进阶教程m7b–混合编程–C语言接口ctypes(1)》中讲到封装C函数时的argstype ,以及在《Python进阶教程m10–多线程》 中讲到创建线程实例时传递函数入参args,下面是**重点*:

  • 如果参数只有一个时,这一个元素之后必须要增加一个逗号“,”,否则就会抛TypeError异常。

我们接下来看看为什么一定要加上这个显得多余的逗号,既然抛TypeError异常了,我们就用type()来看下它们的差异。

如果是一个不包含任何元素的”()”,其类型妥妥的是一个tuple :

>>> a = ()
>>> type(a)
<type 'tuple'>   # 空括号类型为tuple
>>>

当小括号内部仅有一个整数而没有添加逗号时,类型却是int:

>>> a = (1)
>>> type(a)
<type 'int'>   # 括号内只有一个整数时,类型为int
>>>

当小括号内部仅有一个整数且该整数后有逗号时,它的类型又变回了tuple:

>>> a = (1,)
>>> type(a)
<type 'tuple'>  # 括号内1个元素+一个逗号,类型为tuple
>>>

这种形式上的不一致性就会导致我们在编写程序时,如果遇到只有一个元素的tuple,容易忘记加上逗号,从而导致程序抛异常。

再来看个例子,这段程序本意是要计算1,2,3 三个数值的和:

def add(x,y):
    return x+y,

print('微信公众号:桔子code')
a = 1
b = 2
c = 3
sum = add(a,b)
sum = sum + c
print('sum=',sum)    


==========运行结果:
Traceback (most recent call last):
  File "E:\juzicode\pycold\tuple-test.py", line 9, in <module>
    sum = sum + c
TypeError: can only concatenate tuple (not "int") to tuple

运行文件居然抛异常了,提示“sum = sum + c” 这一行中有TypeError,意思是只能用tuple和tuple相加,不能用int和tuple相加。

what?

a和b相加是个int数据,再和c相加,这里明明是int和int相加,怎么提示是int和tuple相加, “sum = sum + c” 这一行中c是int无疑了,难道这里sum是个tuple?改下程序,打印add()函数的返回值sum的类型看看:

def add(x,y):
    return x+y,      # 注意:这里多了一个逗号,改变了返回值类型

a = 1
b = 2
c = 3
sum = add(a,b)
print('type of sum',type(sum))
sum = sum + c
print('sum=',sum)    

==========运行结果:
type of sum <class 'tuple'>
Traceback (most recent call last):
  File "E:\juzicode\pycold\tuple-test.py", line 10, in <module>
    sum = sum + c
TypeError: can only concatenate tuple (not "int") to tuple

果不其然,add()返回值果然是个tuple,往回看func的return值,问题就在这里:“return x+y,” ,最后面多了个逗号“,”,我们知道函数return形式上可以返回多个值,多个值之间用逗号分隔,实际上返回的是个tuple。

  • 我们通常用“()”来定义tuple,但也可以不使用“()”,而是直接用多个逗号将各元素间隔的方式来定义一个tuple:
>>> a = 1,2,3   # 不适用小括号,也可以定义一个元组tuple 
>>> type(a)
<type 'tuple'>
>>>
>>> a = 1,		# 同上
>>> type(a)
<type 'tuple'>

从上面的例子可以看出如果这么定义变量:

a = 1,

实际上a是一个tuple。

回到前面挖的坑,“ return x+y, ” 实际上返回的是一个tuple,所以才导致了抛异常提示不能用int和tuple相加。

Python虽强大,使用需小心!个人感觉,Python语法有些松散。
一个不起眼的逗号该有的时候却没有,或者不该有的时候却出现了,都可能会浪费你很长的时间去“抓虫子”。

本文摘自:好冷的Python–tuple和逗号的恩怨情仇
网址:http://www.juzicode.com/python-cold-tuple-comma/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值