pythontuple_python:tuple 真是鸡肋吗
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 真是鸡肋吗相关推荐
- python元组元素的提取比_Python 元组数据类型(tuple)详解 [访问元组元素][修改元组元素][删除元组][学习 Python 必备基础知识][看此一篇就够了]...
您的"关注"和"点赞",是信任,是认可,是支持,是动力...... 如意见相佐,可留言. 本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新. 1 元 ...
- C++11中std::tuple的使用
std::tuple是类似pair的模板.每个pair的成员类型都不相同,但每个pair都恰好有两个成员.不同std::tuple类型的成员类型也不相同,但一个std::tuple可以有任意数量的成员 ...
- c# 元组Tuple
Tuple类型像一个口袋,在出门前可以把所需的任何东西一股脑地放在里面.您可以将钥匙.驾驶证.便笺簿和钢笔放在口袋里,您的口袋是存放各种东西的收集箱.C# 4.0引入的一个新特性 Tuple类型与口袋 ...
- Python基础06-数据类型:元组tuple
目录 元组 元组的一般用法 元组的方法 元组 元组的一般用法 元组用()括起来,用逗号分隔元素,元素类型是任意的.因为函数.方法的调用也是用()括起来,为了避免混淆,写元组的时候,在最后一个元素后面多 ...
- 【廖雪峰Python学习笔记】list tuple dict set
列表 元组 字典 集合 创建 l = [1, 'a', [1, 3], True] t = (1, ) d = {'key' : 'value'} s = set([1, 2, 4, 2, 1]) 索 ...
- std::tuple类型
1. 元组简介 std::tuple是类似std::pair的模板.每个pair的成员类型都不相同,但每个pair都恰好有两个成员.不同std::tuple类型的成员类型也不相同,但一个std::tu ...
- 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 = ...
- python转换数据类型(int、float、str、eval、tuple、list、chr、ord、bin、oct、hex)
1. 转换数据类型的函数 2. 转换数据类型的作⽤ 问:input()接收⽤户输⼊的数据都是字符串类型,如果⽤户输⼊1,想得到整型该如何操作? 答:转换数据类型即可,即将字符串类型转换成整型. 示例需 ...
- Python报错TypeError: Tuple or struct_time argument required
错误原因,类型出错误啦,转换不了! 我的解决: >>> time.mktime(time.localtime()) 1545053905.0 具体就看下面的! 我的报错: >& ...
最新文章
- ROS修改pkg与node名字
- 报告称企业部署Windows 10比此前版本更快
- 斜度符号标注_几何作图之斜度和锥度
- formidable ajax上传,nodejs+express+ajax实现图片上传及显示
- SPRING IN ACTION 第4版笔记-第二章-001-用@Autowired\@ComponentScan、@Configuration、@Component实现自动装载bean...
- linux使用rename批量修改文件扩展名
- git push 失败出现error: src refspec master does not match any.解决方案
- 【XSY2732】Decalcomania 可持久化线段树 分治
- web开发excel文件上传及解析(上)
- 扫描仪上显示服务器连接错误代码,扫描仪 常见问题解决方法
- html5页面登录页面,html5练习——登录页面
- 高中 信息科技 计算机网络 课件,初中信息技术课件第一课--认识计算机网络.ppt...
- 19、ADS使用记录之窄带F类功放设计
- 83岁清华奶奶,62岁 IT 大爷被阿里40万年薪争抢,你大妈始终是你大妈,你大爷永远是你大爷!...
- 基于JavaScript实现拼图游戏
- delete和delete[]的理解
- java pdf to word_java pdf转word 高效不失真
- jQuery添加css样式/动画效果
- org.apache.ibatis.builder.BuilderException: Error evaluating expression ‘p.residentCode‘. Return
- 人生第一次面试还是霸面----cvte
热门文章
- linux系统修改只读文件权限如(etc/hosts)文件
- 初中数学抽象教学的案例_初中数学教学反思案例
- html email输入框,html5给文本框实现email域名自动完成效果
- Exponential notation 思维题
- WampServer下使用PHP
- CleanCodeHandbook Chapter 7: Stack(39-41)
- 【LINQ】Linq to SQL -- Count/Sum/Min/Max/Avg 操作符
- flex 1037:包不能嵌套
- 错误消息:'events' 为空或不是对象
- spring boot 使用 websocket tomcat刚启动就关闭到问题