python3.9之你应该知道的新特性详解


Posted in Python onApril 29, 2021

一、数字类型

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新特性内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现的二叉树算法和kmp算法实例
Apr 25 Python
python批量添加zabbix Screens的两个脚本分享
Jan 16 Python
深入探究Django中的Session与Cookie
Jul 30 Python
python基础_文件操作实现全文或单行替换的方法
Sep 04 Python
通过python+selenium3实现浏览器刷简书文章阅读量
Dec 26 Python
python实现根据给定坐标点生成多边形mask的例子
Feb 18 Python
Python带参数的装饰器运行原理解析
Jun 09 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
Jul 15 Python
Python调用JavaScript代码的方法
Oct 27 Python
Python numpy大矩阵运算内存不足如何解决
Nov 19 Python
教你用python控制安卓手机
May 13 Python
Python数据分析之绘图和可视化详解
Jun 02 Python
Python基础之tkinter图形化界面学习
Apr 29 #Python
Django cookie和session的应用场景及如何使用
Apr 29 #Python
Python使用random模块实现掷骰子游戏的示例代码
Apr 29 #Python
python中requests库+xpath+lxml简单使用
python实现进度条的多种实现
教你如何使用Python下载B站视频的详细教程
Python+uiautomator2实现自动刷抖音视频功能
You might like
简单的用PHP编写的导航条程序
2006/10/09 PHP
PHP中usort在值相同时改变原始位置问题的解决方法
2011/11/27 PHP
PHP读取汉字的点阵数据
2015/06/22 PHP
php中mkdir()函数的权限问题分析
2016/09/24 PHP
php实现的AES加密类定义与用法示例
2018/01/29 PHP
PHP实现生成推广海报的方法详解
2018/03/14 PHP
php如何比较两个浮点数是否相等详解
2019/02/12 PHP
自定义一个jquery插件[鼠标悬浮时候 出现说明label]
2011/06/27 Javascript
使用jquery自定义鼠标样式满足个性需求
2013/11/05 Javascript
javascript拖拽上传类库DropzoneJS使用方法
2013/12/05 Javascript
javascript使用正则表达式实现去掉空格之后的字符
2015/02/15 Javascript
浅析JS原型继承与类的继承
2016/04/07 Javascript
基于iScroll实现下拉刷新和上滑加载效果
2017/07/18 Javascript
js合并两个数组生成合并后的key:value数组
2018/05/09 Javascript
如何把vuejs打包出来的文件整合到springboot里
2018/07/26 Javascript
react中Suspense的使用详解
2019/09/01 Javascript
浅谈微信小程序列表埋点曝光指南
2019/10/15 Javascript
js canvas实现星空连线背景特效
2019/11/01 Javascript
Python数据分析之获取双色球历史信息的方法示例
2018/02/03 Python
python使用Pycharm创建一个Django项目
2018/03/05 Python
python中正则表达式 re.findall 用法
2018/10/23 Python
python读取目录下最新的文件夹方法
2018/12/24 Python
Python3 使用cookiejar管理cookie的方法
2018/12/28 Python
基于keras输出中间层结果的2种实现方式
2020/01/24 Python
Vince官网:全球著名设计师品牌,休闲而优雅的服饰
2017/01/15 全球购物
C++如何引用一个已经定义过的全局变量
2014/08/25 面试题
信用社实习人员自我鉴定
2013/09/20 职场文书
电子商务专业在校生实习自我鉴定
2013/09/29 职场文书
创业计划书——互联网商机
2014/01/12 职场文书
《有趣的发现》教学反思
2014/04/15 职场文书
毕业评语大全
2014/05/04 职场文书
2016国庆促销广告语
2016/01/28 职场文书
大学生各类奖学金申请书
2019/06/24 职场文书
六年级作文之家庭作文
2019/12/12 职场文书
MySQL数字类型自增的坑
2021/05/07 MySQL
利用Java设置Word文本框中的文字旋转方向的实现方法
2021/06/28 Java/Android