博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python之路【第十一篇】:三目运算、不同数据类型的存储方式及深浅拷贝(copy模块)、列表推导式...
阅读量:6786 次
发布时间:2019-06-26

本文共 1692 字,大约阅读时间需要 5 分钟。

三目运算

又叫做三元运算,是简单if.....else.....语句的一种替代格式,如:

k = 1if k == 1:    print(True)else:    print(False)

如上if....else语句输出结果为True,可以用如下三目运算代替:

k = 1print(True) if k ==1 else False

可以看到,三目运算就是简单if....else...语句的一种代替

不同数据类型在内存中的存储方式

str类型:

s1 = 'hello'print(id(s1))print(id(s1.upper()))

输出结果为:

90146656

89414152

s1 = 'hello'print(id(s1))s2 = s1print(id(s2))

输出结果为:

79793328

79793328

从以上两个实例不难看出,对于str类型,创建之后,如果再修改,就是相当于在内存中重新创建了一次,但是把一个str的值赋值给另一个变量,这两个变量指向的是同一块内存区域

s = '123'for i in s:    print(id(i))

输出结果为:

86225944

90615400
90828512

从该例我们可以看出,str中字符的存储地址在内存中是不连续的

list类型:

li1 = [1,2,3]li2 = li1print(id(li1))print(id(li2))

输出结果为:

85447048

85447048

li1 = [1,2,3]print(id(li1))print(id(li1.append(4)))

输出结果为:

78303624

1376115800

从以上两个实例可以看出,对于list类型,创建之后,如果再修改,就是相当于在内存中重新创建了一次,但是把一个list的值赋值给另一个变量,这两个变量指向的是同一块内存区域

对于字典也有这样的结论,不在另外举例

li = [1,2,3]for i in li:    print(id(i))

输出结果为:

83387256

83387232
83387208

从该例可以看出,list类型的数据,其元素如果是数字在内存中是连续存放的,如果是字符,元素的存放并不连续

本想在这里探究一下存储的方式,但是细节太多,兵来将挡,水来土掩吧,用id直接查看他们的地址吧!

深浅拷贝

拷贝也分深浅,从字面意思来看,两种拷贝方式的不同就在于拷贝的程度深浅不一样

浅拷贝:只拷贝最外面一层

深拷贝:除去最内层全部拷贝

在python中有一个copy模块,copy.copy()为浅拷贝,copy.deepcopy()为深拷贝

对于数字和字符串来说,无论是深拷贝还是浅拷贝,id永远都是一样的,只要修改,就需要再创建一个

对于列表、元组、字典等其他来说,浅拷贝只拷贝最外面一层,深拷贝比较彻底,但最后一层(最底层的字符串,数字)不拷贝

 列表推导式

列表推导式又叫列表生成式,由名字不难看出,得出的结果是一个列表。

当然生成一个列表也可以有别的一些方法,但是通过列表推导式可以写出很简洁的代码

如:

ret = [x*x for x in range(10)]print(ret) 输出结果为:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

  在for的后面可以加条件判断,以满足一些特殊的需求,如:

ret = [x*x for x in range(10) if x%2 == 0]print(ret) 输出结果为:[0, 4, 16, 36, 64]

  

ret = [m + n for m in 'abc' for n in 'xyz']print(ret) 输出结果为:['ax', 'ay', 'az', 'bx', 'by', 'bz', 'cx', 'cy', 'cz']

  通过上面的例子,因该不难掌握列表推导式

转载于:https://www.cnblogs.com/ronghe/p/8358149.html

你可能感兴趣的文章
Jmeter实现webservice的接口测试
查看>>
jmeter用BeanShell调用jar包对HTTP请求中的参数进行MD5加密
查看>>
判断页数及切换
查看>>
GraphQL ---02 GraphQL和C#结合的实战项目
查看>>
Vmware虚拟机三种网络模式详解
查看>>
【已解决】如图,说我磁盘不够,看到var目录下有的个隐藏文件夹占了46G,不知道怎么删除...
查看>>
[LintCode] O(1)检测2的幂次
查看>>
BZOJ3295:[CQOI2011]动态逆序对——题解
查看>>
Office Online简介
查看>>
房天下爬虫
查看>>
常用Shell脚本命令(备忘)
查看>>
Python中的__init__,__call__
查看>>
如何设置Navicat的显示字体与字体大小?
查看>>
【转】HttpServlet详解
查看>>
项目 04 数据库迁移工具,增加用户系统-用户中心
查看>>
程序员小笑话
查看>>
DataTable AsEnumerable 的使用
查看>>
JS滚轮事件(mousewheel/DOMMouseScroll)了解
查看>>
GDI+与GDI屏幕抓图比较
查看>>
mysql中date_add()函数的使用?
查看>>