python3.9之你应该知道的新特性详解
一、数字类型
python除了支持原有的int和float类型,新增了支持Decimal或者Fraction。python还内置支持复数,后缀j或者J用于标识虚数。
二、字符串
如果字符串中有单引号而没有双引号,该字符串外将加注双引号,反之,则加注单引号。print() 函数输出的内容更简洁易读,它会省略两边的引号,并输出转义后的特殊字符。
>> '"Isn\'t," they said.' '"Isn\'t," they said.' >>> print('"Isn\'t," they said.') "Isn't," they said. >>> s = 'First line.\nSecond line.' # \n means newline >>> s # without print(), \n is included in the output 'First line.\nSecond line.' >>> print(s) # with print(), \n produces a new line First line. Second line.
如果不希望前置的\字符转译成特殊字符,可以使用原始字符串,在引号前添加r即可。
>>> print('C:\some\name') # h这里的\n会被认为是转义字符 C:\some ame >>> print(r'C:\some\name') #在转义之前标记为r C:\some\name
字符串可以使用+合并到一起,也可以使用*表示复制多次
>>>3 * 'mmm' + ‘qqq' >'mmmmmmmmmqqq'
相邻的两个或者多个字符串会自动合并
>>>'Py' 'thon' >‘Python'
拆分长字符串时,这个功能特别实用:
>>>('Put several strings within parentheses ' ... 'to have them joined together.') >>>text >'Put several strings within parentheses to have them joined together.'
这个功能只能用于两个字面值,不能用于变量或者表达式:
>>> prefix = 'Py' >>> prefix 'thon' # can't concatenate a variable and a string literal File "<stdin>", line 1 prefix 'thon' ^ SyntaxError: invalid syntax >>> ('un' * 3) 'ium' File "<stdin>", line 1 ('un' * 3) 'ium' ^ SyntaxError: invalid syntax
合并多个变量或者合并变量与字面值,要使用“+”:
>>> prefix + 'thon' 'Python'
字符串支持索引,正向索引和反向索引都支持。
str[0] str[1] str[-1] #为什么反向索引从-1开始? #-0 和 0 相等,指向的是同一个值。
python支持切片操作。索引可以提取单个字符,切片操作可以提取字符串。
>>> word[0] 'P' >>> word[2:5] 'tho'
python切片操作输出结果包含切片开始,但是不包含切片结束。因此s[:i] + s[i:]总是等于s
>>> word[:2] + word[2:] 'Python' >>> word[:4] + word[4:] 'Python'
python可以自动处理越界索引:
>>> word[4:42] 'on' >>> word[42:] ''
python字符串是不可变量,所以直接对某个索引复制会报错。如果想改变字符串的值,必须新建一个字符串。
三、列表类型
python列表是个很神奇的类型,列表中添加的元素可以是不同的数据类型。与python字符串一样,python列表也支持索引和切片操作。
切片操作会返回包含请求元素的新列表。返回的是列表的浅拷贝。
#补充:深拷贝和浅拷贝的区别: #使用浅拷贝,当原容器对象中可变对象中有元素发生变化,拷贝得到的对象也会变#化。而使用深拷贝时,不会有这种问题。 #!/usr/bin/python # -*- coding:utf-8 -*- # @Author : qmt # @Time : 2021/4/27 21:26 import copy # 浅拷贝 list1 = [[1,1], 555 , 'mm'] list2 = list1.copy() list3 = copy.copy(list1) print(id(list1)) print(id(list2)) print(id(list3)) # 输出结果 # 2207574630976 # 2207574779456 # 2207574778816 print(id(list1[0])) print(id(list2[0])) # 输出结果: # 2287435172736 # 2287435172736 print(id(list1[1])) print(id(list2[1])) # 输出结果: # 2085715335536 # 2085715335536 print(id(list1[2])) print(id(list2[2])) print(id(list3[2])) # 输出结果: # 3009054756720 # 3009054756720 # 3009054756720 # 改变第一个值,查看复制对象的变化 list1[0][0] = 100 print(list1) print(list2) print(list3) # 输出结果: # [[100, 1], 555, 'mm'] # [[100, 1], 555, 'mm'] # [[100, 1], 555, 'mm'] list1[2] = 32 print(list1) print(list2) print(list3) # 输出结果: # [[100, 1], 555, 32] # [[100, 1], 555, 'mm'] # [[100, 1], 555, 'mm'] # 字符串是不可变对象,所以浅拷贝不会同步到其他复制对象中 list1[1] = 'mm' print(list1) print(list2) print(list3) # 输出结果: # [[100, 1], 'mm', 32] # [[100, 1], 555, 'mm'] # [[100, 1], 555, 'mm']
深拷贝:
#!/usr/bin/python # -*- coding:utf-8 -*- # @Author : qmt # @Time : 2021/4/27 21:35 import copy list1 = [[1,2],'mm',2222] list2 = copy.deepcopy(list1) print(id(list1)) print(id(list2)) # 输出结果:指向不同的内存地址 # 2847485493888 # 2847485646528 list1[0][0] = 100 print(id(list1)) print(id(list2)) # 输出结果:list2作为一个深拷贝对象,内存地址并没有发生变化 # 1368800613056 # 1368800441920 list1[2] = 100 print(list1) print(list2) # 输出结果:list1的任何操作都不会对list2产生影响,因为这相当于创建了一个新的对象 [[100, 2], 'mm', 100] [[1, 2], 'mm', 2222]
总结:
可变类型 Vs 不可变类型
可变类型(mutable):列表,字典
不可变类型(unmutable):数字,字符串,元组
深拷贝会把可变对象也拷贝一份,而浅拷贝不会。
上面例子中说的是列表(可变对象)的拷贝,那对于元组,字符等不可不对象呢?
答案是,对不可变对象,其实不存在深浅拷贝的问题。无论怎么拷贝,效果都是新建立一个指向不可变对象的指针而已。
import copy a = (1,2) b = copy.copy(a) c =copy.deepcopy(a) print(b == c) print(id(b)==id(c)) lista = [5,6] listb = copy.copy(lista) listc = copy.copy(lista) print(listb == listc) print(id(lista) == id(listb))
输出结果:
True
True
True
False
Python中的对象包含三个基本要素,分别是: id:用来唯一标识一个对象,可以理解为内存地址; type:标识对象的类型; value:对象的值; == :比较两个对象的内容是否相等,即两个对象的 value 是否相等,无论 id 是否相等,默认会调用对象的 __eq__()方法 is: 比较的是两个对象是不是完全相同,即他们的 id 要相等。 也就是说如果 a is b 为 True,那么 a == b 也为True
四、for循环
for n in range(2,10): for x in range(2,n): if n % x == 0: print(n ,'equals',x ,'*', n//x) break else: print(n,'is a prime number')
输出结果:
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3
到此这篇关于python3.9之你应该知道的新特性详解的文章就介绍到这了,更多相关python3.9新特性内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!
相关文章
JavaScript中的Reflect对象详解(ES6新特性)
这篇文章主要介绍了JavaScript中的Reflect对象(ES6新特性)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2016-07-29- 这篇文章主要介绍了ES6新特性之变量和字符串用法,结合具体实例形式分析了ES6中变量与字符串的特性、使用方法与相关注意事项,需要的朋友可以参考下...2017-04-03
- GTID(Global Transaction ID)是对于一个已提交事务的编号,并且是一个全局唯一的编号。下文给大家介绍MySQL 5.6 GTID新特性实践,感兴趣的朋友一起看看吧...2016-10-20
- 这篇文章主要介绍了C++17新特性个人总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-07-22
- 这篇文章主要介绍了python3.9之你应该知道的新特性详解,需要的朋友可以参考下...2021-04-29
ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
这篇文章主要介绍了ES6新特性之类(Class)和继承(Extends)相关概念与用法,结合实例形式较为详细的分析了ES6中类(Class)和继承(Extends)的基本概念、语法、使用方法与注意事项,需要的朋友可以参考下...2017-05-27- 这篇文章主要介绍了ES6新特性之解构、参数、模块和记号用法,结合实例形式分析了解构、参数、模块和记号的功能、用法及相关使用注意事项,需要的朋友可以参考下...2017-04-03
- 从8.0开始,可通过SET PERSIST命令将全局变量的修改持久化到配置文件中,下面这篇文章主要给大家介绍了关于MySQL8新特性之全局参数持久化的相关资料,需要的朋友可以参考下...2021-10-11
- 这篇文章主要介绍了详解numpy1.19.4与python3.9版本冲突解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-16
浅谈Python3.10 和 Python3.9 之间的差异
多年来,Python 进行了大量升级,并且在新版本中添加了许多功能。本文就详细的介绍 一下Python3.10 和 Python3.9差异,感兴趣的朋友可以了解一下...2021-09-02- PHP7新特性foreach与前版本稍一些改变了,那么在PHP7新特性foreach到底作了什么改变呢,我们下面一起来看看PHP7新特性foreach 修改使用例子,希望文章能够帮助到大家。...2016-11-25
- 下面小编就为大家分享一篇asp.net使用H5新特性实现异步上传的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-09-22
- 本文主要介绍jQuery 3中一些新增的特性和一些变更的特性,以及一些废弃删除的特性,另外介绍了jQuery 3.0 最大的变化就是彻底放弃对 IE8 的支持,大家可以先看一下。...2016-04-17
- 干货来袭! 为大家分享了C# 7.0 新特性,VS2017可用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-22
- 这篇文章主要介绍了MySQL8.0新特性——事务性数据字典与原子DDL的相关资料,帮助大家更好的理解和学习MySQL8.0感兴趣的朋友可以了解下...2020-08-26
- C#7.0 增加了许多新功能,并专注于数据消费,简化代码和性能的改善。接下来通过本文给大家介绍C#7.0中新特性汇总,需要的朋友可以参考下...2020-06-25
- 因为创建PYTHON中国(www.okpython.com)和推广PYTHON,所以一直没时间去研究PHP5的特性,现在终于有时间了。 今天说下__autoload函数的功能: 说明:自动加载类文件...2016-11-25
MIUI 8有哪些新功能 小米MIUI 8系统实用新特性功能详情解答
MIUI 8作为新一代小米系统,备受米粉们的关注,很多米粉们都想知道MIUI 8有哪些新功能特性?值得更新吗?针对这一问题,本文小编就为大家图文介绍小米MIUI 8新特性功能汇总...2016-07-04- 这篇文章主要介绍了C++11/14的新特性(更简洁),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-04-25
- 这篇文章主要介绍了你应该知道的Python3.6、3.7、3.8新特性小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-05-13