您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:python3.9之你应该知道的新特性详解

51自学网 2021-10-30 22:43:01
  python
这篇教程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 lineFirst line.Second line.

如果不希望前置的/字符转译成特殊字符,可以使用原始字符串,在引号前添加r即可。

>>> print('C:/some/name')  # h这里的/n会被认为是转义字符C:/someame>>> print(r'C:/some/name')  #在转义之前标记为rC:/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:26import copy# 浅拷贝list1 = [[1,1], 555 , 'mm']list2 = list1.copy()list3 = copy.copy(list1)print(id(list1))print(id(list2))print(id(list3))# 输出结果# 2207574630976# 2207574779456# 2207574778816print(id(list1[0]))print(id(list2[0]))# 输出结果:# 2287435172736# 2287435172736print(id(list1[1]))print(id(list2[1]))# 输出结果:# 2085715335536# 2085715335536print(id(list1[2]))print(id(list2[2]))print(id(list3[2]))# 输出结果:# 3009054756720# 3009054756720# 3009054756720# 改变第一个值,查看复制对象的变化list1[0][0] = 100print(list1)print(list2)print(list3)# 输出结果:# [[100, 1], 555, 'mm']# [[100, 1], 555, 'mm']# [[100, 1], 555, 'mm']list1[2] = 32print(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:35import copylist1 = [[1,2],'mm',2222]list2 = copy.deepcopy(list1)print(id(list1))print(id(list2))# 输出结果:指向不同的内存地址# 2847485493888# 2847485646528list1[0][0] = 100print(id(list1))print(id(list2))# 输出结果:list2作为一个深拷贝对象,内存地址并没有发生变化# 1368800613056# 1368800441920list1[2] = 100print(list1)print(list2)# 输出结果:list1的任何操作都不会对list2产生影响,因为这相当于创建了一个新的对象[[100, 2], 'mm', 100][[1, 2], 'mm', 2222]

总结:

可变类型 Vs 不可变类型
可变类型(mutable):列表,字典
不可变类型(unmutable):数字,字符串,元组

深拷贝会把可变对象也拷贝一份,而浅拷贝不会。

上面例子中说的是列表(可变对象)的拷贝,那对于元组,字符等不可不对象呢?

答案是,对不可变对象,其实不存在深浅拷贝的问题。无论怎么拷贝,效果都是新建立一个指向不可变对象的指针而已。

import copya = (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新特性内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


Python基础之tkinter图形化界面学习
教你怎么用Python实现多路径迷宫
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。