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 相关文章推荐
同时安装Python2 &amp; Python3 cmd下版本自由选择的方法
Dec 09 Python
利用python如何处理nc数据详解
May 23 Python
对TensorFlow的assign赋值用法详解
Jul 30 Python
Python寻找两个有序数组的中位数实例详解
Dec 05 Python
python3.7将代码打包成exe程序并添加图标的方法
Oct 11 Python
Python自动化完成tb喵币任务的操作方法
Oct 30 Python
pandas 空数据处理方法详解
Nov 02 Python
使用 Python 写一个简易的抽奖程序
Dec 08 Python
python实现用类读取文件数据并计算矩形面积
Jan 18 Python
Django-xadmin后台导入json数据及后台显示信息图标和主题更改方式
Mar 11 Python
Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
Jul 14 Python
Python如何进行时间处理
Aug 06 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
用Socket发送电子邮件(利用需要验证的SMTP服务器)
2006/10/09 PHP
php下实现折线图效果的代码
2007/04/28 PHP
PHP基础学习小结
2011/04/17 PHP
php中base_convert()进制数字转换函数实例
2014/11/20 PHP
PHP设计模式之装饰者模式代码实例
2015/05/11 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
2020/02/18 PHP
JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
2012/10/11 Javascript
EasyUI学习之Combobox下拉列表(1)
2016/12/29 Javascript
BootStrap3中模态对话框的使用
2017/01/06 Javascript
关于Javascript中document.cookie的使用
2017/03/08 Javascript
angular仿支付宝密码框输入效果
2017/03/25 Javascript
使用vue-cli webpack 快速搭建项目的代码
2018/11/21 Javascript
vue+eslint+vscode配置教程
2019/08/09 Javascript
微信小程序页面渲染实现方法
2019/11/06 Javascript
jQuery+ThinkPHP实现图片上传
2020/07/23 jQuery
[01:50]WODOTA制作 DOTA2中文宣传片《HERO》
2013/04/28 DOTA
[55:23]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python中replace方法实例分析
2014/08/20 Python
Python中使用item()方法遍历字典的例子
2014/08/26 Python
python使用reportlab实现图片转换成pdf的方法
2015/05/22 Python
python实现用于测试网站访问速率的方法
2015/05/26 Python
Python SQL查询并生成json文件操作示例
2018/08/17 Python
自学python的建议和周期预算
2019/01/30 Python
详解Python Matplot中文显示完美解决方案
2019/03/07 Python
给你一面国旗 教你用python画中国国旗
2019/09/24 Python
使用python的turtle绘画滑稽脸实例
2019/11/21 Python
台湾旅游网站:灿星旅游
2018/10/11 全球购物
波兰品牌鞋履在线商店:Eastend.pl
2020/01/11 全球购物
linux面试题参考答案(8)
2015/08/11 面试题
大学自荐信
2013/12/12 职场文书
远程教育心得体会
2014/01/03 职场文书
党员一句话承诺大全
2014/03/28 职场文书
任命书模板
2014/06/04 职场文书
党员个人总结范文
2015/02/14 职场文书
2015年办公室文员工作总结
2015/04/24 职场文书
教师病假条范文
2015/08/17 职场文书