| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> 培养pythonic思维(1-10条) -> 正文阅读 |
|
[Python知识库]培养pythonic思维(1-10条) |
1.python版本选择python目前的版本分为python2和python3,并且这两个版本并不兼容。笔者写这篇文章的时候是2022-05-03,此时python2早已停止了维护(2020年1月1日,python2停止更新维护)。建议新入手的python使用者选择python3。如果你的项目深度依赖于python2代码库,那么可以考虑2to3与six工具来过渡到python3。 2.PEP8风格指南PEP8风格指南的是python代码风格的指南,如果大家的python代码都 与空白有关的建议
因此,建议大家设置tab键为4个空格。
与命名有关的建议
与表达式和语句有关的建议
与引入有关的建议
pythonicpythonic这个词用来形容python开发界的特定风格,这种风格是大家在写代码的过程中逐渐形成的习惯。 python之禅中提到的python代码设计哲学“每件事都应该有简单的做法,而且最好只有一种”。python开发者不喜欢写复杂的代码,而是喜欢直观,简单且易懂的方式编写代码。 3.bytes和str的区别bytesbytes实例包含的是原始数据,即8位无符号值。 在网络传输,读写二进制文件的时候,通常使用bytes类型。 strstr实例包含的是Unicode码点。 在python3中,默认的编码方案是utf-8. 在编写python代码的时候,一定要把解码和编码操作放在最外层来做,让程序的核心部分可以使用Unicode数据来操作,这种办法叫做Unicode三明治。程序核心应该使用str类型的Unicode数据,并且最好使用utf-8编码。 bytes和str的区别python3是强类型语言,bytes和str是两种不同的数据类型,它们之间不能直接运算。而是必须转换为统一的数据类型。通常是通过下面这两个辅助函数来完成。
操作文件在操作文件的时候,python3内置的open函数返回的文件句柄默认使用Unicode字符串操作,而不是bytes实例,除非在open函数中指定以二进制方式打开文件。例如:
4.使用f-string取代C风格的格式字符串和str.format方法在python3.6中引入了f-string来进行格式字符串,它解决了C风格的格式字符串和str.format带来的缺点。 C风格的格式字符串对于大多数人而言,C风格的格式字符串都是熟悉的。因为很多语言的格式字符串写法都来自于C语言的printf函数。python也支持C风格的格式字符串,例如:
Effective Python中作者提到的几个缺点确实在经常使用python做命令行应用程序开发或者小脚本的时候,深有体会。下面是4个缺点。
str.format后来python3引入了str.format的高级字符串格式化机制,它比C风格的格式字符串要更加强大。但是依旧没有解决上面提到的几个问题,因此在python3.6的时候引入了f-string,一个str.format例子如下所示:
这种写法比C风格的格式字符串见到了一些,但是并没有完全解决2,4两个缺点。str.format引入了一套迷你规则来控制format,可以通过交互式终端输入 f-stringf-string可以很好的解决上面提到的所有问题。新的语法要求在字符串之前加上F(f)来作为前缀形成f-string. f-string把格式字符串的表达能力发挥到极致,它彻底解决了上面的第4个缺点,也就是键名重复导致的冗余问题。例如:
并且,f-string也支持str.format方法所支持的那套迷你语言。同一个问题,使用f-string方式比C风格的格式字符串和str.format风格都要简单,优雅的多。这也和python之禅所追求的目标一致。 5.用辅助函数取代复杂的表达式由于python的语法非常简明(不是简单),所以有时候只用一条表达式就能实现许多逻辑。例如,求一句英文中最后一个单词的长度。
一行代码即可求解,但是这样的表达式是复杂的,因此应该考虑把它拆分开来,形成多个部分,并且把这套逻辑写道辅助函数中,这样虽然多了几行代码,但是可以让程序更加清晰,更加容易修改,所以总体而言还是非常值得使用辅助函数来代替复杂表达式。 6.把数据结构拆分到多个变量里,不用使用下标访问这个问题,实际上可以通过namedtuple来代替tuple从而得到解决。当然,我们也可以通过类中的属性来解决。但是这里介绍的是使用多个变量来替代。也就是主要介绍解包unpacking,例如:
通过unpacking,可以让代码更加清晰,通过使用变量来操作相应的值,而且只需要一行代码即可把people中的多个值赋给相应的变量。 7.尽量用enumerate取代range在我们需要通过下标操作的时候,通常会使用range函数。例如:
这种写法需要我们先求取列表的长度,然后根据长度来缺点循环次数,最后使用每次循环的i作为下标。这样写就很C语言,因此python提供了enumerate函数来解决刚才的问题,enumerate能够把任何一种迭代器封装为惰性生成器。每次循环的时候,enumerate能够给出下一个值以及本次循环的次数。另外,还可以通过enumerate的第二个参数来指定起始序号(默认为0),注意不要超出范围。下面通过next来展示enumerate的作用。
输出结果如下所示:
现在,我们改写上面的for循环如下:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/28 8:16:33- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |