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 系统调用的实例详解
Jul 11 Python
python使用opencv按一定间隔截取视频帧
Mar 06 Python
Python数据可视化库seaborn的使用总结
Jan 15 Python
Python 微信爬虫完整实例【单线程与多线程】
Jul 06 Python
基于 Django 的手机管理系统实现过程详解
Aug 16 Python
python3.5 cv2 获取视频特定帧生成jpg图片
Aug 28 Python
pymysql 开启调试模式的实现
Sep 24 Python
Python有参函数使用代码实例
Jan 06 Python
django 前端页面如何实现显示前N条数据
Mar 16 Python
python库skimage给灰度图像染色的方法示例
Apr 27 Python
Python排序算法之插入排序及其优化方案详解
Jun 11 Python
聊聊基于pytorch实现Resnet对本地数据集的训练问题
Mar 25 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
MySQL数据库转移,access,sql server 转 MySQL 的图文教程
2007/09/02 PHP
比较全的PHP 会话(session 时间设定)使用入门代码
2008/06/05 PHP
ajax实现无刷新分页(php)
2010/07/18 PHP
mysql desc(DESCRIBE)命令实例讲解
2016/09/24 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
JS验证日期的格式YYYY-mm-dd 具体实现
2013/06/29 Javascript
如何在JavaScript中实现私有属性的写类方式(一)
2013/12/04 Javascript
Nodejs学习笔记之入门篇
2015/04/16 NodeJs
第三章之Bootstrap 表格与按钮功能
2016/04/25 Javascript
jQuery Validate验证框架详解(推荐)
2016/12/17 Javascript
详解Nodejs的timers模块
2016/12/22 NodeJs
js中删除数组中的某一元素实例(无下标时)
2017/02/28 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
详解NODEJS基于FFMPEG视频推流测试
2017/11/17 NodeJs
JavaScript数据结构与算法之队列原理与用法实例详解
2017/11/22 Javascript
Vue使用json-server进行后端数据模拟功能
2018/04/17 Javascript
vue生命周期与钩子函数简单示例
2019/03/13 Javascript
[42:25]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第三场
2018/04/06 DOTA
Python实现动态添加类的属性或成员函数的解决方法
2014/07/16 Python
Python中下划线的使用方法
2015/03/27 Python
利用Python中的输入和输出功能进行读取和写入的教程
2015/04/14 Python
Python中read()、readline()和readlines()三者间的区别和用法
2017/07/30 Python
numpy排序与集合运算用法示例
2017/12/15 Python
Python socket套接字实现C/S模式远程命令执行功能案例
2018/07/06 Python
python实现多进程代码示例
2018/10/31 Python
pycharm激活方法到2099年(激活流程)
2020/09/22 Python
购买一个高级域名:BuyDomains
2018/03/11 全球购物
Groupon法国官方网站:特卖和网上购物高达-70%
2019/09/02 全球购物
解释DataSet(ds) 和 ds as DataSet 的含义
2014/07/27 面试题
电大物流学生的自我评价
2013/10/25 职场文书
机械设计专业应届生求职信
2013/11/21 职场文书
电大本科自我鉴定
2014/02/05 职场文书
海飞丝广告词
2014/03/20 职场文书
共青团员自我评价范文
2014/09/14 职场文书
法人代表证明书格式
2014/10/01 职场文书
党小组评议意见
2015/06/02 职场文书