你做的 9 件事表明你不是专业的 Python 开发人员

这篇具有很好参考价值的文章主要介绍了你做的 9 件事表明你不是专业的 Python 开发人员。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文转载自国外论坛 medium,原文地址:
https://medium.com/navan-tech/7-java-features-you-might-not-have-heard-of-adee8166d942,由博主简译后给大家带来!

Show me your code and I will tell you who you are.

This article will fix the bad habits you have stuck to over the years or brought from other programming languages.

是的,老外就这么吊,文章开头就是"给我看看你的代码,我来告诉你,你有几斤几两!"
紧接着,老外告诉你这篇文章为什么这么吊,意思是这篇文章可以纠正你多年以来从其他语言坚持而来的坏习惯。。。虽然博主确实编了几年程序。

一、手动格拼接字符串

大多数时候,Python 初学者在组合两个字符串时会使用 + 号。

>>> name = "Ridwan"
>>> age = "22"
>>> print("My Name is " + name + " and I am " + age + " years old")
My Name is Ridwan and I am 22 years old

不要使用 + 号,而应使用 f 字符串,这样可以使您的代码可读、简洁且不易出错。python3.6+开始支持 f 格式字符串

>>> print(f"My Name is {name} and I am {age} years old")
My Name is Ridwan and I am 22 years old

二、使用默认可变参数

在 Python 中,只要您将可变值作为参数传递给函数,默认参数就会在函数被调用时发生变化。这些可变参数通常是列表或字典。

如下:

>>> def append(n, l=[]):
...     l.append(n)
...     return l
...

可以看到 append 函数的第二个参数 l 是一个可变参数,只要您使用值为 n 调用该函数,它就会更改默认值 l。

// 第一次调用
>>> l1 = append(0)
>>> l1
[0]

当您下次在调用 append 函数时,您将看到您使用的先前值附加到空列表参数。

// 第二次调用
>>> l2 = append(1)
>>> l2
[0, 1]

简而言之也就是说由于 l 在 append 函数中被默认初始化为一个 list,第二次调用时,l 并没有重置,导致返回时还带有第一次调用的结果。

这个问题可以通过重写代码来解决,

>>> def append(n, l = None):
...     if l is None:
...         l = []
...     l.append(n)
...     return l
...
>>> l1 = append = [0]
>>> l2 = append = [1]
>>> l1,l2
([0], [1])

现在参数 l 被设置为 None,任何时候函数被调用,即使 l 发生了变化,它也会被重新分配为 None,然后给出一个空列表的值。

三、不使用推导式

Python 推导式 为您提供了一种构建序列的简洁方式,上次我检查过,Python 支持 4 种类型的推导式;

  • 列表推导式
  • 集体推导式
  • 字典推导式
  • 生成器推导式

你可以在这里阅读更多关于他们的信息。

下面的代码将字典中的值除以 2,

>>> numbers = {}
>>> for i in range(10):
...     numbers[i] = i/2
...
>>> numbers
{0: 0.0, 1: 0.5, 2: 1.0, 3: 1.5, 4: 2.0, 5: 2.5, 6: 3.0, 7: 
3.5, 8: 4.0, 9: 4.5}

上面的代码可以写成一行,

>>> {i: i/2 for i in range(10)}
{0: 0.0, 1: 0.5, 2: 1.0, 3: 1.5, 4: 2.0, 5: 2.5, 6: 3.0, 7: 
3.5, 8: 4.0, 9: 4.5}

所以不要让自己过得不好,开始使用推导式。

推导式确实算是 python 开发一大利器,用好推导式,早下班!

四、检查 Equality 而不是 Identity

如下,

a = [1, 2, 3]
b = [1, 2, 3]

如果我让你检查这两个变量是否相同,你首先想到的是,

>>> a == b
True

问题是你需要知道 Identity 和 Equality 之间的区别。

如果检查a和b的内存地址,

>>> id(a), id(b)
(1838093945856, 1838093487488)

您可以看到尽管它们具有相同的对象,但它们都有不同的内存地址。

这就是为什么当你运行代码时,

>>> a == b
True
You get True, but when you run

>>> a is b
False

当你调用 a is b 返回 False时,a 和 b 就不是相等的了。

在运行如下代码,

>>> c = [1,2,3]
>>> d = c
>>> id(c), id(d)
(1838089019712, 1838089019712)

可以看到,c和d是相等且相同的,c中的对象也被赋值给了d。

>>> c == d
True
>>> c is d
True

这意味着 c 和 d 具有相同的值和内存地址。

因此你可以说 c 是相同的并且等于 d。

写这篇文章就是为了让你知道 is 和 == 的区别,前者是用来检查 identity ,后者是用来检查 equality 的。

所有相同的变量都相等,但并非所有相等的变量都相同。

这一段看着有点绕,说人话就是 == 比较的是连个变量的值是否相等,is 比较的是两个比变量的内存地址相等!,我相信大伙都明白哈,不然白看了这么多年八股文。

五、不使用元组解包

任何时候你在 Python 中创建一个元组 a_tuple = 1,2,3 ,它会默认进行元组打包,

>>> a_tuple = 1,2,3
>>> a_tuple
(1, 2, 3)

然后可以通过索引访问元组内元素

>>> x = a_tuple[0]
>>> y = a_tuple[1]
>>> z = a_tuple[2]
>>> print(x, y, z)
1, 2, 3

其实无需使用多行代码访问元组中的元素,您可以通过元组解包自动在一行代码中完成。

>>> x,y,z = a_tuple
>>> print(x, y, z)
1, 2, 3

元组解包也是 python 中常用的开发技巧,提升开发效率。

六、创建您自己的索引计数器变量

这个在其他编程语言中很常见,你被要求创建一个索引计数器变量,然后你输入类似的东西;

>>> a_list = [1,2,3,4,5,6,7,8,9,10]
>>> index = 0
>>> for elem in a_list:
...     print(index, elem)
...     index += 1
...
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10

相反,使用 enumerate 函数使您的代码看起来像 Pythonic(这里指写出python风格的代码);

>>> for index, elem in enumerate(a_list):
...     print(index, elem)
...
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10

这里批评下 Java,这么多年了,foreach 循环也拿不到索引。

七、使用 Print 语句代替日志记录模块

这在小型项目中可能无关紧要,但肯定会对大型项目有所帮助。

不要用打印语句乱扔代码,而是使用日志记录。

>>> print('This is a warning message')
This is a warning message
>>> print('This is an error message')
This is an error message
>>> print('This is a critical message')
This is a critical message

日志记录有助于向您的用户显示有用的消息,以增加对代码库中发生的事情的更多上下文和理解。

>>> import logging
>>> logging.warning('This is a warning message')
WARNING:root:This is a warning message
>>> logging.error('This is an error message')
ERROR:root:This is an error message
>>> logging.critical('This is a critical message')
CRITICAL:root:This is a critical message

这年头还有人在线上不用文件记录日志吗?有的话告诉我一声,
我肯定拿刀找他!

八、使用 import * 在命名模块中导入函数和类

这种坏习惯有时在新手中很常见。

使用 import * 导入会破坏您的命名空间,方法是将该命名模块中的所有函数和类导入您的代码,这可能会与您定义的函数或导入的其他库的函数发生冲突。

反正博主从来不用 import *,至于你用不用我不知道,但是我建议你不要用。

九、不关注 pep8

pep8就是Python官方指定的编码规范

我们大多数人都犯了这个罪,

我承认我有罪

在我被取消之前😂,我知道我在这篇文章中的一些代码可能违反了 PEP-8 的规则,但事实是痛苦的,需要被告知,遵循 PEP-8 风格和指南让其他人更容易阅读并理解你的代码。

老外的这篇文章在 medium 的邮件推荐中,可能老外知道自己这篇文章的示例代码也违反了 pep8 规范,怕被取消推荐了,我猜的,不保真。

不推荐

>>> def function():
...     x = [1,2,3]
...     y= [2,3,5]
...     z = [1, 2,3]
...
>>> def value(x = 7):
...     ...
...

推荐

>>> def function():
...     x = [1, 2, 3]
...     y = [2, 3, 5]
...     z = [1, 2, 3]
...
>>> def number(x=7):
...     ...
...

要阅读更多关于 PEP-8 风格和指南的信息,请查看这篇文章 https://realpython.com/python-pep8/。

感谢阅读,希望这篇文章值得你花时间。

公众号【waynblog】每周更新博主最新技术文章,欢迎大家关注文章来源地址https://www.toymoban.com/news/detail-410933.html

到了这里,关于你做的 9 件事表明你不是专业的 Python 开发人员的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 不是测试人员的“锅”,要怎么“甩”?

    作为资深测试人员,你是不是经常听到这样的话,为什么这么LOW的BUG会出现在客户手上?为什么功能没测完就发给客户测?这个BUG不是代码问题,需求是这么定的?这个需求不合理,开发表示拒绝,等等需要测试背的“锅”。 所以从一开始,测试就要关注需求。往往在讨论设

    2024年02月16日
    浏览(16)
  • 一文带你了解注册信息安全专业人员CISP

    CISP即\\\"注册信息安全专业人员\\\",系国家对信息安全人员资质的最高认可。英文为Certified Information Security Professional (简称CISP),CISP系经中国信息安全测评中心实施国家认证。 CISP证书涵盖方向: “注册信息安全工程师”,英文为Certified Information Security Engineer,简称 CISE。证书持

    2024年02月02日
    浏览(21)
  • 黑客和安全专业人员最重要的网络渗透测试工具

    导语:在这里您可以找到涵盖在所有环境中执行渗透测试操作的综合网络安全工具列表。 · OpenVAS – OpenVAS是一个包含多种服务和工具的框架,可提供全面而强大的漏洞扫描和漏洞管理解决方案。 · Metasploit Framework – 针对远程目标计算机开发和执行漏洞攻击代码的最佳网络安

    2024年02月06日
    浏览(27)
  • 项目管理专业人员能力评价等级证书(CSPM)的级别介绍

    2021年10月, 中共中央、国务院 发布的 《国家标准化发展纲要》 明确提出构建多层次从业人员培养培训体系,开展专业人才培养培训和国家质量基础设施综合教育。建立健全人才的职业能力评价和激励机制。由 中国标准化协会(CAS) 组织开展的 项目管理专业人员能力评价等

    2024年02月08日
    浏览(23)
  • CBP认证是什么?区块链专业人员认证含金量大吗?

    (1)CBP是什么? CBP(Certified Blockchain Professional)即区块链专业人员认证,涵盖最新的区块链原理与实践知识。旨在为IT从业人员在数字化时代下提供全面的区块链原理及安全思维,理解和掌握区块链、密码技术、共识机制、激励机制、智能合约、P2P网络等的基本原理和实践应用

    2024年02月13日
    浏览(22)
  • CSPM项目管理专业人员能力等级评价各级考试题目由什么构成?

    2021年10月, 中共中央、国务院 发布的 《国家标准化发展纲要》 明确提出构建多层次从业人员培养培训体系,开展专业人才培养培训和国家质量基础设施综合教育。建立健全人才的职业能力评价和激励机制。由 中国标准化协会(CAS) 组织开展的 项目管理专业人员能力评价等

    2024年02月08日
    浏览(21)
  • 计算机行业是不是最挣钱的?非专业能进这一行吗?

    挣钱是每个人进入社会后的主要目标,想要挣大钱,就一定要进入一个热门行业,很多人都问过大使,计算机行业是不是现在挣钱的行业,其实这句话对也不对,现在最挣钱的行业肯定是娱乐业,但是对于我们普通人来说,想要在短时间挣钱,计算机行业肯定是不二的选择。

    2024年02月05日
    浏览(27)
  • 面向专业开发者的Python IDE——PyCharm,各个版本如何抉择?

    PyCharm是一个专业的Python集成开发环境(IDE),为Python开发人员提供了广泛的基本工具,紧密集成为高效的Python、Web和数据科学开发创建了一个方便的环境。 PyCharm v2022.2正式版下载 (技术交流Q:786598704) 选择最适合自己的PyCharm版本 PyCharm有三个版本: 社区版 (免费且开源):用

    2024年02月08日
    浏览(30)
  • 简易操作系统:使用Python 做的图形界面 C 做的内核

    目录 实验要求 一、文件管理和用户接口 ⑴文件的逻辑结构 ⑵磁盘模拟 ⑶目录结构 ⑷磁盘分配 ⑸磁盘空闲存储空间管理 ⑹用户接口 ⑺屏幕显示  代码部分         python调用c的方法: ​编辑 c语言部分,文件名 Operating_System_C.c python语言部分 运行实例:    文件管理和用户

    2024年02月08日
    浏览(29)
  • 纪念一下自己做的第一款开发板

    前言:之前乐鑫搞活动白嫖了10个ESP32-S2模组,想着把它给利用了,然后先从一个开发板做起,等玩明白了再去做一些自己的设计,从网上找了一些资料就开始干,中途也是遇到了一些问题,有的解决了,有的还没解决,如果有懂的大佬,欢迎指点一下。 这款开发板参考乐鑫

    2024年02月04日
    浏览(18)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包