本文通过15个具体的例子,带你领略 Python 的简洁和优雅。

下文中'P'即表示'Pythonic',很 Python 的写法,'NP'也就是相反,不是很'Pythonic'的写法。

1、为多个变量赋值

### NP:

a = 2

b = 5

c = 12

### P:

a,b,c = 2,5,12

2、变量值互换

a = 50

b = 25

### NP:

temp = a

a = b

b = temp

### P:

a,b = b,a

上面的例子通过了元组的pack和unpack完成了对a,b的互换,避免了使用临时变量temp,而且只用了一行代码。

3、链式比较

a = 50

b = 25

### NP:

0<= b and b<=a and a<100

### P:

0 <= b <= a < 100

后者的写法更接近数学表达式。

4、any/all函数

anyallPython的内置函数。对于 any函数,可迭代参数的任何一个元素为真就返回 True,否则返回 False。对于 all函数,如果可迭代参数的所有元素为真(或迭代器为空),返回 True,否则返回 False

### NP:

xyz = [4641951.185   1393053.923   4133281.067]

for v in xyz:

   if 0.0==v:

       return False

return True

### P:

return all(xyz)

5、用in代替or简化判断

同样是多重判断问题,判断某个变量是否为多个可能取值之一

### NP:

if 'green'==s0 or 'red'==s0 or 'blue'==s0:

   return True

else:

   return False

### P:

return s0 in ('green', 'red', 'blue')

6、if/else 三目运算

### NP:

if age > 18:

   ss = 'adult'

else:

   ss = 'child'

### P:

ss = 'adult' if age > 18 else 'child'

后者的写法简单易懂,仅需一行代码就完成了常规写法4行代码的功能。

7、字符串列表的连接

lst_str = ["Python", "is", "a", "good", "language"]  

### NP1:

ss = ''

for s0 in lst_str:

   ss += s0 + ' '

### NP2:

ss = '%s %s %s %s %s'%(lst_str[0], lst_str[1], lst_str[2], lst_str[3], lst_str[4])

### P:

ss = ' '.join(lst_str)

使用 join方法可以指定间隔字符(串)将字符串列表合并成一个字符串。

8、匹配字符串开头/结尾

fname1 = 'python.jpg'

fname2 = 'folwer.bmp'

fname3 = 'readme.txt'

### P:

fname1.startswith('python')           #True

fname2.endswith('.jpg')                #False

fname2.endswith(('.jpg', '.bmp'))     #True

fname3.endswith(('.jpg', '.bmp'))      #False

9、列表推导式

从列表中找出符合条件的元素组成新的列表

lst0 = [11, 22, 24, 87, 70]

### NP:

lst1 = []

for v in lst0:

   if v>30:

       lst1.append(v)

### P:

lst1 = [ v for v in lst0 if v>30 ]

可以结合上面两条tips,可以实现快速找出文件夹下指定类型的文件,例如:

picfiles = [nm for nm in os.listdir(mydir) if nm.endswith( ('.jpg', '.bmp', '.tiff', '.gif', '.png') ) ]

10、使用zip同步处理多个列表

当想要对多个列表对应的元素进行操作时

income = [201, 198, 195, 210, 199]

cost_rent = [80, 83, 77, 81, 80]

cost_food = [47, 64, 53, 51, 79]

balance = []

### NP:

nlen = len(income)

for i in range(nlen):

   balance.append(income[i] - cost_rent[i] - cost_food[i])

### P:

for i0, cr, cf in zip(income, cost_rent, cost_food):

   balance.append(i0 - cr - cf)

zip(a,b) 会生成一个可返回元组 (x,y) 的迭代器,其中x来自a,y来自b。一旦其中某个序列到底结尾,迭代宣告结束。因此迭代长度跟参数中最短序列长度一致。

11、列表去重

### NP:

lst_new = []

for v in lst_old:

   if not v in lst_new:

       lst_new.append(v)

### P:

lst_new = list(set(lst_old))

12、文件打开与关闭/上下文管理

### NP:

fp = open('result.txt', 'w')

try:

   fp.write('just for fun!')

except IOError:

   print('something error')

finally:

   fp.close()

### P:

with open('result.txt', 'w') as fp:

   fp.write('just for fun!')

with 关键字实现了上下文管理器,是一种更简洁也更安全的操作方法。上例中当离开 with 代码块的时候,系统会自动调用 fp.close() 方法关闭文件, 哪怕中间遇到异常,close 方法也会被调用。

13、Enumerate

枚举函数,用于枚举可迭代对象,并且同时返回元素的下标索引值。

如果你想在迭代一个序列的同时,得到被处理元素的索引下标。内置的 enumerate() 函数可以很好的解决这个问题:

array = ['Stone', 'Tom', 'Jobs', 'Jack']

### NP:

narr = len(array)

for i in range(narr):

   print (i, array[i])

### P:

for i, a0 in enumerate(array):

   print (i, a0)

#0 Stone

#1 Tom

#2 Jobs

#3 Jack

14、对齐字符串

有时,你想通过某种对齐方式来格式化字符串,输出一些提示信息

ss = 'Summary'

### NP:

print ('%s%s%s', '-'*20, ss, '-'*20)

### P:

print (ss.center(50,'-'))

#--------------------Summary--------------------

类似地,想让字符串左对齐或者右对齐,可以用 .ljust(50, '-') 或 rjust(50, '-')

15、解包

解压列表/元祖的元素,赋值给不同的变量

lst = ['jack', 18, 'Python', 'Good']

### NP:

name = lst[0]

age = lst[1]

lang = lst[2]

score = lst[3]

### P:

name, age, lang, score = lst

如果想解包一个长列表,只得到其中部分元素,例如第一个和最后一个元素:

### P:

head, *mid, tail = lst

该例子中,除了头、尾元素之外,中间不受关注的元素作为一个子列表全部赋值给了 mid 。

-END-

长按识别关注 | GitPython

np合并 python_这15个tips,带你领略 Python 的简洁和优雅相关推荐

  1. 带你领略python魔法~免费复制文档数据

    前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~ 我们百度搜索一些东西得时候,经常找到文档里面 然后就会发现需要充值才能复制!怎么可以不花钱也保存呢? 今天就分享给大家一个python获取文档数据得方法 环 ...

  2. 以太坊后合并时代 15个概念带你深入了解以太坊2.0

    北京时间9月15日14时42分左右,以太坊正式完成合并.以太坊在区块高度15537393触发合并机制,并产出首个PoS区块,高度为15537394,以太坊共识正式从PoW转为PoS机制. 以太坊进入后 ...

  3. python 1 2 3怎么拼接所有可能的数_6000字长文,带你用Python完成 “Excel合并(拆分)” 的各种操作!...

    原标题:6000字长文,带你用Python完成 "Excel合并(拆分)" 的各种操作! 一.概述 其实Excel合并这个需求,应该是一个极为普遍的需求了.今天我们就利用Pytho ...

  4. python第三方库有哪些常用的、请列举15个-你想要的Python面试都在这里了【315+道题】...

    第一部分 Python基础篇(80题) 1.为什么学习Python? 1.python是脚本语言,作为程序员至少应该掌握一本通用脚本语言,因为脚本语言与编译语言的开发测试过程不同,可以极大的提高编程效 ...

  5. 带你自学Python系列(六):列表解析和列表切片

    ↑ 点击上方[计算机视觉联盟]关注我们 今天是小编持续更新关于Python的知识总结以及Python实践项目应用的第6天,带你利用零碎时间自学最受欢迎的编程语言之一Python语言.你和小编一起打卡了 ...

  6. 带大家读python数据分析一书(三)

    带大家读python数据分析一书(三) 写在开头   今天写博客的时候才发现CSDN里面的博客模板改版了更新了一些,好像更亲和html多一些了?连换行都要用上br了,不过无所谓这不是重点,对于我开说只 ...

  7. 训练数据太少?过拟合?一文带你领略“数据增长魔法”(上)

    注意:本文是转载博客,如有侵权,请联系删除! 运行环境及其Paddle版本 [下面是我的主页链接] 来AI Studio互粉吧 https://aistudio.baidu.com/aistudio/ ...

  8. 风云编程python-动态排名可视化 | 带你领略编程语言20年风云变化

    原标题:动态排名可视化 | 带你领略编程语言20年风云变化 作者 | 周萝卜 来源 | 萝卜大杂烩 2019已经过去,回看编程语言20年真是风云变化! 从 TIOBE 榜(热门榜)上来看,Java.C ...

  9. python动态排名可视化_动态排名可视化 | 带你领略编程语言20年风云变化

    原标题:动态排名可视化 | 带你领略编程语言20年风云变化 作者 | 周萝卜 来源 | 萝卜大杂烩 2019已经过去,回看编程语言20年真是风云变化! 从 TIOBE 榜(热门榜)上来看,Java.C ...

最新文章

  1. NodeJS + PhantomJS 前端自动化资源监控
  2. 配置交换机端口聚合(思科)
  3. 安装完python后怎么使用-安装anaconda后该怎么使用
  4. 收到猎头信息的一些感想
  5. mysql 查询相同字段值的个数_好文 | MySQL 索引B+树原理,以及建索引的几大原则...
  6. ios did receive memory warning
  7. [Java基础]哈希值
  8. 产品经理经验谈100篇(八)-产品经理分析框架解析
  9. 【bzoj1758】[Wc2010]重建计划
  10. 大端、小端的前世今生
  11. 【Prescan学习】Prescan环境配置(介绍+安装+学习资源)
  12. 解决shardingsphere 4.1.1 SQLFeatureNotSupportedException: isValid sharding-jdbc
  13. 如何区分前端bug还是后端bug?
  14. 残差分析三要素(补充说明OLS六个条件与残差季节性)
  15. m3u8下载合并图片文件(但实际上还是ts文件)
  16. iOS各版本发布时间汇总
  17. python检索用人名查电话_ldap3 python搜索组成员并检索其sAMAcountName(Active Directory)...
  18. DIT和DIF实现快速傅里叶变换的FFT
  19. MATLAB高光谱图像处理基础
  20. 微信小程序测试过程中的各个要点(干货)

热门文章

  1. ​电赛 | 19年全国一等奖,北航学子回忆录。
  2. docker 删除_docker 批量删除镜像
  3. PHP引用全局作用域中可用的全部变量是,php全局变量之学习笔记
  4. java上传音频到服务器_Java 客户端向服务端上传mp3文件数据的实例代码
  5. navicat创建计算列_Tableau Part 9 计算字段amp;粒度聚合比率amp;表计算
  6. arcgis超级工具密码_浏览器的自动保存密码是如何将我们的密码泄露的?
  7. 使用TI 的低功耗C5x DSP的指纹识别方框图和解决方
  8. 类库探源——System.ValueType
  9. 常见性能优化小技巧原理
  10. oracle-单行函数