但是呢 , 所有属性需要提前定义好才能使用 , 比如想使用my_car.name , 你就得把代码改成下面的样子 。
from collections import namedtuple# 以前简单的类可以使用 namedtuple 实现 。Car = namedtuple('Car', 'color mileage name')my_car = Car('red', 3812.4,"Auto")print(my_car.color)print(my_car.name)使用 namedtuple 的缺点很明显了 。
所以现在更优的方案 , 那就是 Python3.7 加入到标准库的 dataclass 。
其实在 3.6 也可以使用不过需要它被作为第三方的库使用了 , 使用 pip 安装即可 。使用示例如下:
from dataclasses import dataclass@dataclassclass Car: color: str mileage: floatmy_car = Car('red', 3812.4)print(my_car.color)print(my_car)6.f-string 的 !r,!a,!s
f-string出现在Python3.6 , 作为当前最佳的拼接字符串的形式 , 看下 f-string 的结构
f ' <text> { <expression> <optional !s, !r, or !a> <optional : format specifier> } <text> ... '其中'!s' 在表达式上调用str() , '!r' 调用表达式上的repr() , '!a' 调用表达式上的ascii()
(1.默认情况下 , f-string将使用str() , 但如果包含转换标志 , 则可以确保它们使用repr () !
class Comedian: def __init__(self, first_name, last_name, age): self.first_name = first_name self.last_name = last_name self.age = age def __str__(self): return f"{self.first_name} {self.last_name} is {self.age}." def __repr__(self): return f"{self.first_name} {self.last_name} is {self.age}. Surprise!"调用
>>> new_comedian = Comedian("Eric", "Idle", "74")>>> f"{new_comedian}"'Eric Idle is 74.'>>> f"{new_comedian}"'Eric Idle is 74.'>>> f"{new_comedian!r}"'Eric Idle is 74. Surprise!'(2.!a的例子
>>> a = 'some string'>>> f'{a!r}'"'some string'"等价于
>>> f'{repr(a)}'"'some string'"(3.!d的例子
类似2
pycon2019有人提出的一个展望!d的功能实现:

文章插图
在python3.8中已经实现上述功能 , 不过不再使用!d了改为了f"{a=}"的形式 , 看过这个视频的发现没有!d应该很懵逼7.f-string 里"="的应用
在 Python3.8 里有这样一个功能
a = 5print(f"{a=}")打印之后的结果为
a=5是不是很方便 , 不用你再使用f"a={a}"了 。
8.海象运算符:=的使用
a =6if (b:=a+1)>6: print(b)赋值的时候同时可以进行运算 , 和 Go 语言的赋值类似了 。
代码的运行顺序 , 首先计算 a+1 得到值为 7 , 然后把 7 赋值给 b , 到这里代码相当于下面这样了
b =7if b>6: print(b)怎么样是不是简单了不少?
推荐阅读
- 30行Python代码爬取Wifi密码
- 如何将一个 Python 函数进行模块化封装
- 复习时针扎穴位提神 这些方法也能提神
- 淘宝怎么开通直播步骤? 淘宝直播间的这些设置,你知道要怎么操作?
- 吃过这些经典小吃,才算到过苏州
- 这几个“养生知识”都是坑人!医学上根本没有这些概念
- 这些必吃的减肥水果,分分钟消灭你的肥肉!
- 买手机最该看的三方面?原来性能并非第一位,看懂这些不交智商税
- iOS 15这些实用功能,值得你一试
- 用微信赚钱的小心了,这些操作全都被禁止
