Python 3.10 中的 6 个新特性,你体验了吗?
1. 引言
在Python中有许多编码小技巧。有时,了解其中的一些技巧可以帮助我们减少编写的代码量,同时让我们的程序看起来更加优雅简洁。
在本文中,我将介绍我在日常工作中经常使用的5个编码小技巧!
2. 三元表达式
三元表达式,顾名思义,是指一个包含三个部分的表达式。第一部分是一个条件,如果条件为真,则执行第二部分;否则,将执行第三部分。Python语法看起来为part_2 if condition else part_3。
不妨举个栗子,代码如下:
number = 1
parity = "even" if number % 2 == 0 else "odd"
print(parity)
# odd
1.
2.
3.
4.
上述代码中,我们根据数字为奇偶数来对其进行赋值。如果数字是偶数,我们将奇偶性赋值为偶数;否则为奇数。很简单,不是吗?然而,请注意一件事:在第三部分或后面的内容中,我们只需要提供分配给变量奇偶性的取值即可。
其实,语句part_2 if condition else part_3,实质上等价于以下代码:
if condition:
part2 = value1
else:
part2 = value2
1.
2.
3.
4.
更加一般的是我们也可以在函数调用上使用上述三元运算,代码如下:
def add(a,b):
return a+b
def multiply(a,b):
return a * b
a, b = 3, 5
res = (multiply if a > b else add) (a,b)
print(res)
# 8
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
3. 使用with操作相关文件
Python中的文件操作经常需要先打开,完成操作后在进行关闭或者释放。此外,代码中还经常会有异常情况产生,此时我们希望使用代码来尝试释放相应的资源。首先可以想到的是采用try..finally代码块来处理上述情况,代码如下:
f = open('Hi.text', 'w')
try:
f.write('Hello, there')
finally:
f.close()
1.
2.
3.
4.
5.
但是一种更加优雅的写法是采用with关键字,代码如下:
with open('Hi.text', 'w') as f:
f.write("Hello, there")
1.
2.
with关键字是Python中上下文管理器的一个特效。上下文管理器可以让我们在需要的时候精准地分配和释放相应的资源,这意味着我们可以在使用某些资源时缩短代码段!同时,我们还可以通过覆盖__enter__和__exit__函数来定义自己的上下文管理器!例如,我们可以在这里定义自己的方式:
class My_file:
def __init__(self, fname):
self.fname = fname
def __enter__(self):
self.file = open(self.fname, 'w')
return self.file
def __exit__(self, exc_type, exc_val, exc_trace_back):
if self.file:
self.file.close()
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
相应的调用代码如下:
with My_file('hello.txt') as f:
f.write('hello, world!')
1.
2.
4. 一行中的多个比较
如果我们有一个变量n,我们需要检查n是否在0到100之间,我们会怎么做?(n>0)and (n<100)?
在Python中我们直接使用 0<n<100就可以啦,是不是超级简单!
5. for...else语句
我们最常用的是if...else语句,但是Python中也支持for..else语句,样例代码如下:
for i in range(0,3):
print(i)
else:
print(i)
# 0
# 1
# 2
# 2
1.
2.
3.
4.
5.
6.
7.
8.
上述代码中,当循环执行完后,else代码块将执行。for...else语句块可以被理解为当循环条件不满足时,我们来处理我们需要做的事,伪代码逻辑如下:
for i in range(n):
if condition:
you_find_your_stuff()
break
else:
you_did_not_find_your_stuff()
1.
2.
3.
4.
5.
6.
上述代码中,如果条件condition满足,此时break运行,这个时候else代码块将不会执行。如果条件condition不满足,此时else代码块将会执行。
6. List生成式
List生成式主要用于从旧数据上生成我们所需的数据列表。
一般语法如下:
data_list = [expression_to_generate_new_data for item in iterable if condition]
1.
用于生成数字0-9的平方和的代码如下:
square_numbers = [i*i for i in range(10)]
print(square_numbers)
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1.
2.
3.
如果我们只想处理上述列表中的奇数呢?我们的代码可以改写如下:
square_numbers = [i*i for i in range(10) if i % 2 == 1]
print(square_numbers)
# [1, 9, 25, 49, 81]
1.
2.
3.
我们在对其进行扩展,如果对列表中的奇数计算平方运算,对偶数进行立方运算,代码如下:
square_numbers = [i*i if i % 2 == 1 else i*i*i for i in range(10)]
print(square_numbers)
# [0, 1, 8, 9, 64, 25, 216, 49, 512, 81]
1.
2.
3.
7. 总结
本文对日常工作中经常使用到的五个Python技巧进行了总结和归纳,使用这些技巧可以减少我们的代码量让代码看起来更加简介优雅!
您学废了吗
-----------------------------------
©著作权归作者所有:来自51CTO博客作者sgzqc的原创作品,请联系作者获取转载授权,否则将追究法律责任
五个提升Python编码能力的小技巧
https://blog.51cto.com/u_15506603/5175781
Python 是当今最流行的编程语言之一。它有广泛的领域和应用,从学习计算机科学的基础,到执行复杂或者直接的科学计算任务来创建游戏。它的高级应用甚至包含数据科学和量子计算。
Python的流行有很多原因。其中最主要的原因是Python和其他语言相比,通用性强,简单易学。除此之外,Python的开发和维护者——Python软件基金会——一直致力于用新的方法改进Python。
一周之前(2021年10月4日),一个新的Python版本发布了,Python 3.10。在新的版本中,Python 添加了独特且有价值的功能,同时删除了一些旧功能。我们可以将任何新软件版本中添加或删除的功能归为多个类别,例如语法特性、添加到默认库或对现有特性的改进。
Python 3.10 有几个新的很酷的功能,使得使用 Python 成为一种更好的体验。在本文中,我将与您分享 6 个让我最兴奋的新特性。
一、
更清楚的错误追踪
作为一个每天写Python 、教Python 的人,我深知遇到语法错误的挫败感。尽管一旦你掌握了Python和编程,就很容易修复语法错误,但是我们还是希望错误消息能给我们更好的提示,以帮助我们更好地定位错误并节省调试时间。
在Python 3.10中,两个新特性使得我们可以更好地处理错误,他们是更清楚的错误消息以及精确的行号。比如,我们有以下代码,包含一个字典和一个函数。但是我们忘记了字典结束的花括号“}”。
some_dict = {1: "jack", 2: "john", 3: "james" ,a_results = a_useful_function
在之前的Python版本中,错误信息如下:
File "amazing_code.py", line 3 a_results = a_useful_function ^ SyntaxError: invalid syntax # 无效的语法
但是,随着新的错误消息和行号的改进,新的错误消息将包含更好的信息,例如准确的错误类型和精确的行号。
File "amazing_code.py", line 1 expected = {1: "jack", 2: "john", 3: "james" , ^ SyntaxError: '{' was never closed # 未关闭的 “ { ”
这一新特性将有助于加快调试速度,并减少人们开始学习 Python 的挫败感。
二、
结构化模式匹配
如果您使用过 C++ 等其他编程语言,您可能希望 Python 有 switch 语句,这样您就不必经历冗长的 if、elif、elif、....、else 语句。好吧,Python 3.10 的新特性之一是添加了结构化模式匹配,或者换句话说,具有以下语法的 switch、case 语句。
match subject: case <patt1>: <act1> case <patt2>: <act2> case <patt3>: <act3> case _: <action_default>
三、
新的类型联合运算符
尽管 Python 是一种动态类型的编程语言,但还是有一些方法可以使它的某些部分成为静态类型的。比如,你正在写一个函数,而属性的类型对于函数的内部通信很重要。在之前的版本中,你可以指定类型如下:
def func(num: int) -> int: return num + 5
但是,如果你要接受两种类型,你就需要使用Union关键字。
def func(num: Union[int, float]) -> Union[int, float]: return num + 5
在新版Python中,你可以用“|”运算符替代Union关键字,这样会更直接。
def func(num: int | float) -> int | float: return num + 5
四、
其他很酷的特性
4.1 更严格的zip
Python的乐趣之一就是zip函数。它是一个内置函数,允许你同时遍历多个序列,并组合其返回值。在之前的版本中,你可以对不同长度的序列使用zip。但是,现在有了一个新的参数,strict,用来检查可遍历对象是否长度一致。
4.2 自动文本编码
作为程序员,我们会说,“他在我的电脑上能运行的”。代码在一台机器上运行而不在另一台机器上运行的原因有很多;文本编码可能会导致此类错误。
在以前的 Python 版本中,如果没有明确说明编码类型,首选的本地编码可能会导致代码在其他机器上失败。在 Python 3.10 中,可以激活警告以通知用户打开文本文件没有指定编码类型。
4.3 异步迭代
异步编程是一个强大而先进的编程范式,它从 3.5 版开始就成为 Python 的一部分。在Python 3.10,有两个新的异步的内置功能aiter和anext使你的代码更易读。
*声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。