python 新特性

文章目录

formatted字符串字面值

formatted字符串是带有'f'字符前缀的字符串,可以很方便的格式化字符串

python 复制代码
#旧版本
name = '张三'
print('姓名是:%s'%name)
print('姓名是:{}'.format(name))
#新版本
print(f'{name},欢迎您加入')
works = ['数据分析','财务报表']
print(f'工作内容:{works[0]},{works[1]}等')
#格式化字符串字面值(formatted stringliteral),可以在字符串常量内使用嵌入的Python表达式。
a = 5
b = 10
print(f'表达式运算的结果:{2*(a+b)}')

'''输出结果
姓名是:张三
姓名是:张三
张三,欢迎您加入
工作内容:数据分析,财务报表等
表达式运算的结果:30
'''

formatted字符串支持 =

python 复制代码
user = 'zhangsan'
info = f'{user=}'
print(info) # user=zhangsan 
#指定格式输出
name = 'manager'
#旧版本
print('{:*^20}'.format(name))
#新版本
print(f'{name:*^20}')
#数值类型的格式化输出
num = 10
print(f'{num=:.2f}') # num=10.00 :.2f代表控制输出2个小数
pct = 0.834
#旧版本
print('{:.2f}%'.format(pct*100))
#新版本
print(f'{pct*100:.2f}%')

'''输出结果
user='zhangsan'
******manager*******
******manager*******
num=10.00
83.40%
83.40%
'''

字符串新方法

方法名 功能描述
str.removeprefix() 如果str以它开头的话,将会返回一个修改过前缀的新字符串,否则它将返回原始字符串。
str.removesuffix() 如果str以其结尾,则返回带有修改过后缀的新字符串,否则它将返回原始字符串。
python 复制代码
info = 'sutpc'
print(info.removeprefix('sut'))
print(info.removesuffix('pc'))
'''输出结果
pc
sut
'''

变量类型标注

变量类型注解是用来对变量和函数的参数返回值类型做注解 (暗示),帮助开发者写出更加严谨的代码,让调用方减少类型方面的错误,也可以提高代码的可读性和易用性。但是,变量类型注解语法传入的类型表述能力有限,不能说明复杂的类型组成情况,因此引入了 typing 模块,来实现复杂的类型表达。

Type Description Type Description
int 整型integer Union 联合类型
float 浮点数字 Optional 参数可以为空或已经声明的类型
bool 布尔(int的子类) Mapping 映射,是collections.abc.Mapping的泛型
str 字符(unicode) MutableMapping Mapping对象的子类,可变
bytes 8位字符 Generator 生成器类型,GeneratorYieldType、SendType、ReturnType
object 任意对象(公共基类) NoReturn 函数没有返回结果
Liststr 字符组成的列表 Set 集合set的泛型,推荐用于注解返回类型
Tupleint, int 两个int对象的元组 AbstractSet collections.abc.Set的泛型,推荐用于注解参数
Tupleint, ... 任意数量的int对象的元组 Sequence collections.abc.Sequence的泛型,list、tuple等的泛化类型
Dictstr, int 键是str值是int的字典 TypeVar 自定义兼容特定类型的变量
Iterableint 包含int的可迭代对象 Generic 自定义泛型类型
Sequencebool 布尔值序列(只读) NewType 声明一些具有特殊含义的类型
Mappingstr, int 从str键到int值的映射(只读) Callable 可调用类型,Callable\[参数类型,返回类型]
Any 具有任意类型的动态类型值 NoReturn 没法返回值

二进制表示中数字为1的数量统计

通过调用bit_count函数来统计二进制中数字"1"的个数

python 复制代码
# bit_count()函数
#旧版本
value = 5
print(bin(value).count("1"))
#新版本
print(value.bit_count())

字典的三个方法新增mapping属性

python 复制代码
mydict = {"一":1,"二":2,"三":3}
#旧版本
print(mydict.keys(),mydict.values(),mydict.items())
#新版本
keys = mydict.keys()
values = mydict.values()
items = mydict.items()
print(keys.mapping,values.mapping,items.mapping)

'''输出结果
dict_keys(['一', '二', '三']) dict_values([1, 2, 3]) dict_items([('一', 1), ('二', 2), ('三', 3)])
{'一': 1, '二': 2, '三': 3} {'一': 1, '二': 2, '三': 3} {'一': 1, '二': 2, '三': 3}
'''

在Python3.10中,针对于字典的三个方法,items,keys,和values都增加了一mapping属性,通过上诉的程序可以发现,对三个方法调用mapping属性后都会返回原字典数据

函数zip()新增strict参数

python 复制代码
keys = ['one','two','three','four']
values = [1,2,3,4,5]
#旧版本
print(dict(zip(keys,values)))
#新版本
print(dict(zip(keys,values,strict=True)))

对于zip函数加了strict参数,顾名思义strict参数就是要严格的通过参数长度的匹配原则,在以上代码中,keys和values列表的长度并不一致。旧版本的zip函数会根据长度最短的参数创建字典。新版本的zip函数中,当设定strict参数为True,则要求zip的输入数必须要长度一致,否则报错。

dataclass

为了支持数据修改, 默认值, 比较等功能。更加好一些的方法是:使用自定义类来实现数据类。
dataclass 可以认为是提供了一个简写__init__ 方法的语法,类型注释是必填项 (不限制数据类型时, 添加typing.Any为类型注释), 默认值的传递方式和__init__ 方法的参数格式一致。

python 复制代码
from dataclasses import dataclass
from typing import ClassVar
@dataclass
class Player:
	name:str
	number:int
	postion:str
	age:int
p1 = Player('zhangsan',18,'PG',26)
print(p1)
'''输出结果
Player(name='zhangsan', number=18, postion='PG', age=26)
'''

字典合并

字典添加两个新的运算符:[|][|=][|]运算符用于合并字典。[|=]用于更新字典。

python 复制代码
dict1 = {'name':'zhangsan'}
dict2 = {'type':'manager'}
#旧版本
dict1.update(dict2)
print(dict1)
#新版本
dict3 = dict1 | dict2
print(dict3) # {'name': 'zhangsan', 'type':'mananger'}
#[|=]
dict1 |= dict2 # 等价于dict1 = dict1 | dict2
print(dict1)
'''输出结果
{'name': 'zhangsan', 'type': 'manager'}
{'name': 'zhangsan', 'type': 'manager'}
{'name': 'zhangsan', 'type': 'manager'}
'''

match 语法

match...case结构化模式匹配,可以匹配字典、类以及其他更复杂的结构。match...case的匹配模式匹配于Java或C++中的switch的使用很相似。

python 复制代码
# 语句结构
'''
match subject:
	case <pattern_1>:
		<action_1>
	case <pattern_2>:
		<action_2>
	case <pattern_3>:
		<action_3>
	case _:
		<action_wildcard>
'''

status = 200
match status:
	case 200:
		print('访问成功')
	case 404:
		print('页面丢了')
	case _:
		print('不能识别')
python 复制代码
#模式匹配
person1 = ('James',23,'male')
person2 = ('Lili',33,'female')
person3 = ('Mary',34,'female')
def func(person):
	match person:
		case (name,_,'female'):
			print(f'{name} is woman')
		case (name,_,'male'):
			print(f'{name} is man')
		case (name,age,gender):
			print(f'{name} is {age} old')
#调用函数
func(person1)
func(person2)
func(person3)

'''输出结果
James is man
Lili is woman
Mary is woman
'''
相关推荐
wuyk5556 分钟前
第2章:六步换相原理全解+STM32工程实战
c语言·开发语言·stm32·单片机·嵌入式硬件
hey_sml13 分钟前
JAVA每日一学---CompletableFuture中thenApply与thenCompose区别详解
java·开发语言
萧瑟余晖2 小时前
Java深入解析篇十七之SpringCloud
java·开发语言
北斗落凡尘2 小时前
LangGraph 入门实战(2)
python·langchain
ttod_qzstudio3 小时前
Java 常用语法极简通关(五):类与对象——字段、方法、构造器、this 与 static
java·开发语言·python
萧瑟余晖4 小时前
Java深入解析篇十七之Spring Security
java·开发语言·spring
jufeng13074 小时前
【系列:手搓自主 AI Agent:Hermes 架构原理剖析 · 第 1 篇】
人工智能·python·架构·agent
月光船幽幽5 小时前
影子模式下保护 logits 不被修改
人工智能·python·算法
二十雨辰6 小时前
[Java]-Spring面试题
java·开发语言
_oP_i7 小时前
python 后缀 mjs文件
开发语言·python