优雅的Python

  • 更新时间:
  • 1100人关注
  • 点击下载

这是一个不错的Python类学习资源,由崔承志 提供,主要知识点是关于Python、Python的内容,已被902人关注,同类资源中评分为7.5分。

Python 这门语言最大的优点之一就是语法简洁,好的代码就像伪代码一样,干净、整洁、一目了然。但有时候我们写代码,特别是 Python 初学者,往往还是按照其它语言的思维习惯来写,那样的写法不仅运行速度慢,代码读起来也费尽,给人一种拖泥带水的感觉,过段时间连自己也读不懂。

要写出 Pythonic(优雅的、地道的、整洁的)代码,还要平时多观察那些大牛代码,Github 上有很多非常优秀的源代码值得阅读,比如:requests、flask、tornado,笔者列举一些常见的 Pythonic 写法,希望能给你带来一点启迪。ps:我自己总结一些pythonic代码

1、变量交换

大部分编程语言中交换两个变量的值时,不得不引入一个临时变量

>>> a = 1    # 初学者思维
>>> b = 2
>>> tmp = a
>>> a = b
>>> b = tmp

pythonic

>>> a, b = b, a      # pythonic思维

是否优雅基本属于哲学问题了,比如大括号和缩进你习惯哪个的问题

非要量化的话,差不多就是在实现相同的功能,py代码成本较小,写起来心智负担不大,当然前提是都已经掌握比较好,如果你已经习惯C++的模式,和刚换py相比自然要有一定适应期

相关资源

  • Python可以这样学

    Python可以这样学

    《Python可以这样学》对Python内部工作原理进行了一定深度的剖析,案例代码使用Python 3.5.1实现和Python 3.6.0,适当介绍了Python代码优化、系统编程和安全编程的有关知识,满足不同层次读者的需要,适合作为Python程序员的开发指南。

    大小:22 MBPython

    立即下载
  • Python新手使用Django架站的16堂课

    Python新手使用Django架站的16堂课

    本书作者台湾大师带你活用Django Web Framework快速构建移动网站,以16堂课来介绍Python新手使用Django架站的要点,可作为Python Django的初学者的参考书籍

    大小:199.5 MBPython

    立即下载
  • Python爬虫开发 从入门到实战

    Python爬虫开发 从入门到实战

    1.应用场景Python3.X解读,从新手入门到实战演练,全方位解读Python网络爬虫。 2.全书重难点附送微课解读,书网结合互动学习。 3.实例丰富多彩,高度重视实践活动,主要塑造用户的具体应用工

    大小:12.33 MBPython爬虫

    立即下载
  • 数据结构 Python语言描述

    数据结构 Python语言描述

    在电子信息科学中,数据结构是这门升阶性课程内容,定义抽象性,难度系数很大。Python语言的英语的语法简易,易用性强。用Python来解读数据结构等主题风格,比c语言等保持起來更加非常容

    大小:101 MBPython

    立即下载
  • Python核心编程

    Python核心编程

    全方位包含现如今应用程序开发中的诸多行业为初级Python开发者出示优秀实践活动方式包含很多好用的编码实例每章结尾的练习题有利于推进所教专业知识 想全面提高Python编程水准?请详细分

    大小:22.4 MBPython编程

    立即下载
  • Python数据分析与数据化运营(第2版)

    Python数据分析与数据化运营(第2版)

    大小:14323 MB MPython数据

    立即下载
  • 树莓派Python编程入门与实战 第2版

    树莓派Python编程入门与实战 第2版

    《树莓派Python编程入门与实战》经典系列 直观 循序渐进的树莓派Python编程学习教程 强调实践教学 以示例引导读者完成常见的任务。

    大小:94.6 MBPython

    立即下载

学习笔记

如何写出优雅的python
如何写出优雅的python

如何写出优雅的python

Python语言的优雅之处
Python语言的优雅之处

比如, 我们希望希望检测"一段string是否以特定的字符串结尾?", 通常我们使用:

  if needle.endswith('ly') or needle.endswith('ed') or
    needle.endswith('ing') or needle.endswith('ers'):
    print('Is valid')
  else:
    print('Invalid')

十分丑陋是吧? 如果我们检测变量needle是否是以下特定字符串之一的话, 会这样写:

  if needle in ('ly', 'ed', 'ing', 'ers'):
    print('Is valid')
  else:
    print('Invalid')

但是, 我们无法在 endswith function 中使用 in, 但我们换一种想法, 我们需要检查的其实是"一段string的结尾是否是以下字符串的任意一个?", 我们会发现python有内部函数any, 于是我们的代码可以改为:

  if any([needle.endswith(e) for e in ('ly', 'ed', 'ing', 'ers')]):
    print('Is valid')
  else:
    print('Invalid')

相信很多读者在此会不同意我的做法, 或者有更好的写法存在. 但这已经不重要. 我明白你们大多数都会使用类似的写法面对这一相似的问题. 我真正的目的其实是展示一下Python的优雅之处.