# 若元组只有一个元素,要在后面加上','
def test_turple():
# 空元组
a = ()
print(type(a)) # <class 'tuple'>
# 不是元组
b = ('hello')
print(type(b)) # <class 'str'>
c = (100)
print(type(c)) # <class 'int'>
# 一元组
d = ('hello',)
print(type(d)) # <class 'tuple'>
e = (100,)
print(type(e)) # <class 'tuple'>
# 打包和解包
def pack_turple():
# 打包
a = 1, 10, 100
print(type(a), a) # <class 'tuple'> (1, 10, 100)
# 解包
i, j, k = a
print(i, j, k) # 1 10 100
# 若解包元素与元组内元素个数不同,则会报错
# i,j = a # ValueError: too many values to unpack (expected 2)
# 用星号表达式,有了星号表达式,我们就可以让一个变量接收多个值
i, *j = a
print(i) # 1
print(type(j), j) # <class 'list'> [10, 100]
# 打包解包对字符串,列表也适用
a, b, *c = range(1, 10)
print(a, b, c) # 1 2 [3, 4, 5, 6, 7, 8, 9]
a, b, c = [1, 10, 100]
print(a, b, c) # 1 10 100
a, *b, c = 'hello'
print(a, b, c) # h ['e', 'l', 'l'] o
# 可变参数的原理, 可变参数其实就是将多个参数打包成了一个元组
# 两个**本质上是一个dict
def test_param():
def add(*args):
print(type(args), args)
total = 0
for val in args:
total += val
return total
print(add(1, 2)) # <class 'tuple'> (1, 2) 3
print(add(1, 2, 3, 4, 5)) # <class 'tuple'> (1, 2, 3, 4, 5) 15
# 交换两个数的值,python极为简单
def exchange_two_nums(a, b):
a, b = b, a
print("a交换后是", a)
print("b交换后是", b)
# list和 turple区别
# 元组是不可变类型,不可变类型更适合多线程环境,因为它降低了并发访问变量的同步化开销。关于这一点,我们会在后面讲解多线程的时候为大家详细论述。
# 元组是不可变类型,通常不可变类型在创建时间和占用空间上面都优于对应的可变类型。
# 列表和元组都是容器型的数据类型,即一个变量可以保存多个数据。列表是可变数据类型,元组是不可变数据类型,
# 所以列表添加元素、删除元素、清空、排序等方法对于元组来说是不成立的。但是列表和元组都可以进行拼接、成员运算、索引和切片这些操作,
# 就如同之前讲到的字符串类型一样,因为字符串就是字符按一定顺序构成的序列,在这一点上三者并没有什么区别。
# 我们推荐大家使用列表的生成式语法来创建列表,它很好用,也是Python中非常有特色的语法。如 list1 = [x for x in range(1,10)]
if __name__ == '__main__':
# test_turple()
# pack_turple()
# test_param()
exchange_two_nums(1, 3)