Python重构(五)

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python免费学习资料、代码以及交流解答点击即可加入

历史重构方法:

Python重构(一)
Python重构(二)
Python重构(三)
Python重构(四)

1. 打开文件时使用with以确保文件被关闭

Python中打开和使用文件的常见方式是:

file = open("welcome.txt")
data = file.read()
print(data)
file.close()

但是,如果在打开和关闭文件时抛出异常,对file.close()的调用可能会被跳过。解决这个问题的一种方法是使用try...finally结构确保文件将被关闭。

file = open("welcome.txt")
try:
    data = file.read()
    print(data)
finally:
    file.close()

虽然解决了文件关闭问题,但它非常冗长。这正好可以用Python的context管理器来解决。在幕后,此行为与try ... finally行为相同。退出该代码块后,即使已引发异常,该文件也会立即为您关闭。

with open("welcome.txt") as file:
    data = file.read()
    print(data)

这段代码略短一些,更易于阅读,让您专注于重要的逻辑,而不是文件关闭的细节。

2. 使用default get简化字典访问

如果键存在,我们通常想从字典中选择某些内容,如果不存在,则使用默认值。一种方法是使用如下条件语句:

def pick_hat(available_hats: Dict[Label, Hat]):
    if self.favourite_hat in available_hats:
        hat_to_wear = available_hats[self.favourite_hat]
    else:
        hat_to_wear = NO_HAT
    return hat_to_wear

一个简单的快捷方式是Python字典具有get()方法,此方法的第二个参数可以设置返回的默认值。因此,我们可以将上面的代码缩短为:

def pick_hat(available_hats: Dict[Label, Hat]):
    hat_to_wear = available_hats.get(self.favourite_hat, NO_HAT)
    return hat_to_wear

这简化了代码,消除了一些重复。需要注意的一点是,如果不传递默认值,它将使用“None”。

3. 简化列表访问

在Python中,您可以使用负索引访问列表的末尾。因此,my_list [-1]得到最后一个元素,my_list [-2]得到倒数第二个,依此类推。这意味着下面的代码:

a = [1, 2, 3]
last_element = a[len(a) - 1]

更简单:

a = [1, 2, 3]
last_element = a[-1]

4. 卫语句后去除不必要的else

一种常见的代码模式是在函数的开头设置一些保护子句,以检查是否满足了某些条件,并提前返回,否则将引发异常。

def f(a=None):
    if a is None:
        return 42
    else:
        # some long calculations
        var = (i ** 2 for i in range(a))
        return sum(var)

虽然这是完全有效的代码,但它可能会遇到过度嵌套的问题,特别是当函数的剩余部分相当长时。

这里,我们可以利用不需要else,if的主体通过return或raise结束。

def f(a=None):
    if a is None:
        return 42

    # some long calculations
    var = (i ** 2 for i in range(a))
    return sum(var)

用这种方式使用一个或多个保护条件不会导致函数的其余部分缩进。一般来说,我们需要处理的缩进越少,代码就越容易理解。

5. 将for循环转换为对sum()的调用

很多编程都是将列表相加,Python有内置的sum()函数来帮助实现这一点。

你可以用下面的方式重写for循环:

Before:

total = 0
for hat in hats:
    total += hat.price

After:

total = sum(hat.price for hat in hats)

这样代码更短,还有一个额外的好处就是代码明确地告诉您它试图做什么——将所有帽子的价格相加。

6. 提升返回到if

这是一种稍微简化代码的快速方法。在if的每个分支上设置一个值,然后立即返回,而不是直接从每个分支返回它。

这意味着代码如下:

def f():
    if condition:
        val = 42
    else:
        val = 0
    return val

转为:

def f():
    if condition:
        return 42
    else:
        return 0

这就删除了一个不必要的中间变量,我们不得不在心里跟踪它。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值