python如何编程学生列表信息失败_如何编写出色的Python代码,并且避免其他错误的信息产生...

原标题:如何编写出色的Python代码,并且避免其他错误的信息产生

eff5d29c7a0346c9b4e7cf64fa6a8b62.png

Python是一种很棒的编程语言,它为我们提供了惊人的工具,让我们的代码更具可读性,简洁性和酷劲。今天,我想谈谈编写更多Pythonic代码的方法,我将介绍一些可提高代码质量的绝妙技巧,让我们开始吧…

使用 Unpacking

Python允许变量的元组(或列表)出现在操作的赋值侧。这让我们可以简化代码,使其更具可读性。让我们从拆开元组的示例开始:

755de26e463b43ee893e135cfd52bb1a.png

很简单,在我们的赋值操作的左侧可以有多个变量,而在右侧的值将被逐一分配给每个变量。请注意,左侧的项目数应等于右侧的项目数,否则可能会受到ValueError如下所示:

7351299add8e43809201c4a860b40c91.png

但是,由于Python很棒,因此有多种方法可以防止这种情况的发生,你可以执行以下操作:

6e34036a14c54693847f8a5899607e6f.png

在这种情况下使用*运算符时,它将扩展进行拆包功能,让我们可以在单个变量中收集或打包多个值。只要记住在分配中只能有一个*运算符来避免SyntaxError。

d61487c225cd4c0a861d374805c86a76.png

但也可以解压缩列表:

ff173d5a870c45e7b4750058289cd55e.png

或字符串...

7243bfe523a645f4885365f45ed980ea.png

实际上,你可以通过这种方式使用任何迭代。现在,让我向你展示一件更酷的事情,然后再跳到下一个主题:

0ee7b210d75c4d65b366178c8d7147e7.png

这不是有史以来最漂亮的变量交换吗!

不检查

Python中的None关键字用于定义一个空值,或根本不定义任何值。与其他语言不同,Python中的None是其自己的数据类型(NoneType),只有None可以是None。让我们在示例中查看它如何工作:

727b63c743a24006b4828b7d51a6ab00.png

如果要检查变量实际上是否为None,可以执行以下操作:

cb9b7aea168e43f086bdbb82cfb3b37b.png

这是有效的,但是还有一种更Python化的方式可以做到这一点:

cbaa8a2148b046e482f58fbe705e4c31.png

它执行相同的工作,但是看起来更人性化。

反复进行

Python中的迭代可以非常优雅,甚至可以说是非常Unpythonic(如果该单词存在的话)。如果你来自JS或C#,你会如何尝试在Python中循环?

884d109b8af540b684239c7deb3a7be4.png

然后我学会了其他一些选择:

9495454def1f4715833f9292cbb3cd76.png

但是也许你想要以相反的顺序进行迭代,那么,你可以执行以下操作:

f66f34697b3f49518c064c635d006eb8.png

很好,但是看起来还是很奇怪,也许还有另一种方式:

63c3d94b7b80459f81020cc6ae2f10fe.png

现在看起来很漂亮!但是如果我们需要索引和项目值怎么办?我们在第一次尝试中就拥有了所有这些,现在似乎已经失去了它。不用担心,还有另一种方式可以做到这一点:

2518eb67725a4264a1865239874e4f2a.png

但是有时我们要遍历1个以上的数组,我们该怎么做?我们可以使用打包/拆箱:

320684b74ca043a5bf1999754717a8f2.png

如果我们要单独访问每个值:

42ff02be71a049219849bbcc440e80bf.png

甚至更好:

b128294955c4497a9819d4a66a4182ea.png

有时我们需要遍历对象,Python让我们可以轻松地做到这一点:

a5e9dcbe6db245a79104c7934022fa79.png

但是我们也可以使用.items()对象的方法获取键和值:

1b925c8ca693410592794eab310372da.png

对象还提供类似.keys()和方法.values(),具体取决于你的用例,它们会非常有帮助的。请注意,Python为我们提供了许多遍历事物的方法,有时候range()需要一个遍历a的循环,这是完全可以的,但是对于开发人员来说,其他一些更清晰的替代方案可能更清晰易读,因此我们应该尽可能地使用它们。

避免可变的可选参数

与其他许多语言一样,Python为我们提供了具有可选参数的可能性,并且由于它们非常方便,还可能带来一些意外的行为。让我们看下面的例子:

e6b611806c91490ca765e484d0554b3c.png

到目前为止,我们有一个名为add_value的函数,它在每次调用该函数时在列表中添加一个值,并在最后返回列表。该列表是一个可选参数。现在让我们调用函数并查看其行为:

0ceee0e62c564792903154f1c3bc9aa6.png

完美,我们的可选参数正在运行,因此,我们获得了具有单个值的列表。让我们尝试添加更多:

6a974c17be354ed1b371542e9197d480.png

等等...这是什么?这看起来并不正确,但是实际结果是正确的,一旦我们对其进行了解释,这会是有意义的……。也许没有……让我们看看。当我们定义函数时,Python会生成一个默认值的实例,然后在每次不提供可选值时都使用该实例。对于我们的用例来说,这是一个大问题,因为即使这不是我们在特定情况下所需要的,列表也会不断增长。那么我们如何解决它?我们可以做以下事情:

6ef3500a04e145568536a01b79e3a75c.png

这是在Python中看起来很奇怪的东西,我不太喜欢它,尽管我们现在检测到的这个功能在很多情况下是非常有用的,我们只需要意识到这一点并明智地使用它即可。

属性与Getter和Setters

警告:本主题可能会引起Java开发人员的争议。如果你是Java开发人员或来自C ++尝试执行以下操作,这将非常诱人:

8d5c8d85cd1d41cc9284c5c7447065b0.png

现在,这没什么问题,也不是Python的方式。在向你介绍Python方式之前,请让我拿起墨镜。

dc7a5b74fce2446f87f36cf814ac8a27.png

我现在准备战斗了。。

受保护和私有属性,但不是真正的……

在Python中不存在只能从对象内部访问的“受保护”或“私有”实例变量,但是所有Python开发人员都使用一些约定来指定这些属性。

a134e7803df44a7f8aa4c1b8032c7adb.png

如果现在尝试从类块外部访问x属性,则将获得x的实际值。这是正确的做法:

04fa8cff40464154926df4912267f68e.png

我们可以尝试使用_y:

4ca764a503374591b938971cc63901fc.png

并且我们得到了结果,但是这是不正确的做法,因为该属性以_开头,并且该类的开发人员希望该属性不能从外部访问。但是现在发生了什么__z:

4972fd99ddd9409f9e8c1befac18f41d.png

在这种情况下,我们会得到一个错误,很好,但是仍然可以访问该属性,我们只需要在代码中添加一些“魔术”即可:

d330466c812f459fa25ed154e71b893f.png

如果我们在属性名称前加上_classname,我们仍然可以访问该值,但是这样做是非常错误的。

根据Python文档:带有下划线的名称(例如_spam)应被视为API的非公开部分(无论是函数,方法还是数据成员)。它应被视为实现细节,如有更改,恕不另行通知。形式为__spam的任何标识符(至少两个前导下划线,至多一个下划线)在文本上被_classname__spam替换,其中classname是当前类名,前导下划线被去除。

使用上下文管理器处理资源

在处理资源(例如文件,数据库连接等)时,我们需要处理代码以成功关闭或释放资源,并且看到类似以下很常见的内容:

a6e361ab33a540db85568ffd0e5748b5.png

这段代码是正确的,除非在两者之间发生任何事情,如果发生错误怎么办,我们如何确保文件始终关闭?这是上下文管理器起作用的地方:

fb3d5e06732c461cada13a715eeb5ff4.png

这是一种更安全的方法!

最后

Python是一种非常简单而优雅的语言。它的简单性使其在学习代码的学生或人们中非常受欢迎,但是,编写正确的Python代码非常重要。我希望阅读完本文后,你对使用Python编写代码的方式有一些想法,并可以进行更多研究。我希望你喜欢它!返回搜狐,查看更多

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值