​ Python中元组是没有推导式的,但是我们可以通过生成器推导式创建元组。从形式上看,生成器推导式与列表推导式类似,只是生成器推导式使用小括号。列表推导式直接生成列表对象,生成器推导式生成的不是列表也不是元组,而是一个生成器对象。我们可以通过生成器对象,转化成列表或者元组。也可以使用生成器对象的__next__()方法进行遍历,或者直接作为迭代器对象来使用。不管什么方式使用,元素访问结束后,如果需要重新访问其中的元素,必须重新创建该生成器对象。

old_gen = (x*2 for x in range(5))

print(old_gen)print(tuple(old_gen))print(list(old_gen)) # 只能访问一次元素。第二次就为空了print(old_gen.__next__())new_gen = (x*2 for x in range(5)) # 需要再生成一次print(new_gen.__next__())print(new_gen.__next__())print(new_gen.__next__())>>> at 0x000001980EFACD58>

>>>(0, 2, 4, 6, 8)>>>[]>>>Error:StopIteration>>>0

>>>2

>>>4

①元组的核心特点是:不可变序列,因此我们经常将元组作为函数的入参使用

def func(param1, param2, *args):

print(param1, param2, args)

func(1, 2, 3)

func(1, 2)

func(1, 2, 3, 4)

>>>1 2 (3,)>>>1 2 ()>>>1 2 (3, 4)*args表示任意多个无名参数,类型为tuple。从输出结果我们看到args打印出来的是(3,)只有一个元素为3的元组,为了区分字符串跟元组,单个元素的元组后面需要加个","以作为区分。根据*任意多个无名参数这一特性,我们在字符串格式转换中经常会使用到,工作中我们会涉及到使用sql语句查询数据库而sql里的条件是可变的,这是我们可以通过format进行格式转换:old_tuple = ('abc', 1)

sql = 'SELECT * FROM database where t1 like "%{}%" and t2 = "{}"'sql = sql.format(*old_tuple)print(sql)

>>>SELECT * FROM database where t1 like "%abc%" and t2 = "1"如果有多组参数呢,我们可以将这些参数元组放到列表里然后进行遍历传参就行了。既然讲到了*args,那么顺便把**kwargs也讲一下,**kwargs表示创建一个名为 kwargs的空字典,该字典可接受任意多个外界传入的非关键字实参:def func(param1, param2, *args, **kwargs):

print(param1, param2, args, kwargs)func(1, 2, 3, key1="value1")>>>1 2 (3,) {'key1': 'value1'}**kwargs:可变字典传参是以键值对的形式传参的(key=value),广泛使用于类对象中类方法的传参,我们在调用一个类方法时,当你在输入参数的时候编辑器会智能提示你应该输入什么参数,例如提示"param=",其实就是该类的入参使用的就是字典类型入参。具体关于类的介绍后面再详细讲。②元组作为字典的键

元组可以作为字典的键,通过zip()方法:

tuple_1 = ("a", "b", "c")

tuple_2 = ("1", "2", "3")

print(zip(tuple_1, tuple_2).__next__())

print(dict(zip(tuple_1, tuple_2)))

>>>('a', '1')>>>{'a': '1', 'b': '2', 'c': '3'}③具名元组

namedtuple是继承自tuple的子类。namedtuple创建一个和tuple类似的对象,而且对象拥有可访问的属性。下面看个列子:

from collections import namedtuple

# 定义一个namedtuple类型User,并包含name,sex和age属性。

User = namedtuple('User', ['name', 'sex', 'age'])

# 创建一个User对象

user = User(name='kongxx', sex='male', age=21)

# 也可以通过一个list来创建一个User对象,这里注意需要使用"_make"方法

user = User._make(['kongxx', 'male', 21])

print user >>>User(name='user1', sex='male', age=21)

# 获取用户的属性

print user.name

print user.sex

print user.age

>>>'user1'>>>'male'>>>21

pythontuple_python:tuple 真是鸡肋吗相关推荐

  1. python元组元素的提取比_Python 元组数据类型(tuple)详解 [访问元组元素][修改元组元素][删除元组][学习 Python 必备基础知识][看此一篇就够了]...

    您的"关注"和"点赞",是信任,是认可,是支持,是动力...... 如意见相佐,可留言. 本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新. 1 元 ...

  2. C++11中std::tuple的使用

    std::tuple是类似pair的模板.每个pair的成员类型都不相同,但每个pair都恰好有两个成员.不同std::tuple类型的成员类型也不相同,但一个std::tuple可以有任意数量的成员 ...

  3. c# 元组Tuple

    Tuple类型像一个口袋,在出门前可以把所需的任何东西一股脑地放在里面.您可以将钥匙.驾驶证.便笺簿和钢笔放在口袋里,您的口袋是存放各种东西的收集箱.C# 4.0引入的一个新特性 Tuple类型与口袋 ...

  4. Python基础06-数据类型:元组tuple

    目录 元组 元组的一般用法 元组的方法 元组 元组的一般用法 元组用()括起来,用逗号分隔元素,元素类型是任意的.因为函数.方法的调用也是用()括起来,为了避免混淆,写元组的时候,在最后一个元素后面多 ...

  5. 【廖雪峰Python学习笔记】list tuple dict set

    列表 元组 字典 集合 创建 l = [1, 'a', [1, 3], True] t = (1, ) d = {'key' : 'value'} s = set([1, 2, 4, 2, 1]) 索 ...

  6. std::tuple类型

    1. 元组简介 std::tuple是类似std::pair的模板.每个pair的成员类型都不相同,但每个pair都恰好有两个成员.不同std::tuple类型的成员类型也不相同,但一个std::tu ...

  7. python公共操作(运算符(+、*、in、not in)、公共方法(len()、del、max()、min()、range()、enumerate())、类型转换(tuple、list、set))

    1. 运算符 1.1 + # 1. 字符串 str1 = 'aa' str2 = 'bb' str3 = str1 + str2 print(str3) # aabb # 2. 列表 list1 = ...

  8. python转换数据类型(int、float、str、eval、tuple、list、chr、ord、bin、oct、hex)

    1. 转换数据类型的函数 2. 转换数据类型的作⽤ 问:input()接收⽤户输⼊的数据都是字符串类型,如果⽤户输⼊1,想得到整型该如何操作? 答:转换数据类型即可,即将字符串类型转换成整型. 示例需 ...

  9. Python报错TypeError: Tuple or struct_time argument required

    错误原因,类型出错误啦,转换不了! 我的解决: >>> time.mktime(time.localtime()) 1545053905.0 具体就看下面的! 我的报错: >& ...

最新文章

  1. ROS修改pkg与node名字
  2. 报告称企业部署Windows 10比此前版本更快
  3. 斜度符号标注_几何作图之斜度和锥度
  4. formidable ajax上传,nodejs+express+ajax实现图片上传及显示
  5. SPRING IN ACTION 第4版笔记-第二章-001-用@Autowired\@ComponentScan、@Configuration、@Component实现自动装载bean...
  6. linux使用rename批量修改文件扩展名
  7. git push 失败出现error: src refspec master does not match any.解决方案
  8. 【XSY2732】Decalcomania 可持久化线段树 分治
  9. web开发excel文件上传及解析(上)
  10. 扫描仪上显示服务器连接错误代码,扫描仪 常见问题解决方法
  11. html5页面登录页面,html5练习——登录页面
  12. 高中 信息科技 计算机网络 课件,初中信息技术课件第一课--认识计算机网络.ppt...
  13. 19、ADS使用记录之窄带F类功放设计
  14. 83岁清华奶奶,62岁 IT 大爷被阿里40万年薪争抢,你大妈始终是你大妈,你大爷永远是你大爷!...
  15. 基于JavaScript实现拼图游戏
  16. delete和delete[]的理解
  17. java pdf to word_java pdf转word 高效不失真
  18. jQuery添加css样式/动画效果
  19. org.apache.ibatis.builder.BuilderException: Error evaluating expression ‘p.residentCode‘. Return
  20. 人生第一次面试还是霸面----cvte

热门文章

  1. linux系统修改只读文件权限如(etc/hosts)文件
  2. 初中数学抽象教学的案例_初中数学教学反思案例
  3. html email输入框,html5给文本框实现email域名自动完成效果
  4. Exponential notation 思维题
  5. WampServer下使用PHP
  6. CleanCodeHandbook Chapter 7: Stack(39-41)
  7. 【LINQ】Linq to SQL -- Count/Sum/Min/Max/Avg 操作符
  8. flex 1037:包不能嵌套
  9. 错误消息:'events' 为空或不是对象
  10. spring boot 使用 websocket tomcat刚启动就关闭到问题