• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >Lua > 让你的python代码更加pythonic(简练、明确、优雅)

让你的python代码更加pythonic(简练、明确、优雅)

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了pythonic,python代码,python代码运行助手,python代码示例,python代码编辑器等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

何为pythonic?

pythonic如果翻译成中文的话就是很python。很+名词结构的用法在中国不少,比如:很娘,很国足,很CCTV等等。

我的理解为,很+名词表达了一种特殊和强调的意味。所以很python可以理解为:只有python能做到的,区别于其他语言的写法,其实就是python的惯用和特有写法。

置换两个变量的值。

很python的写法:

a,b = b,a
</div>

不python的写法:

temp = a
a = b
b = temp
</div>

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

以下为了简略,我们用P表示pythonic的写法,NP表示non-pythonic的写法,当然此P-NP非彼P-NP。

为什么要追求pythonic?

相比于NP,P的写法简练,明确,优雅,绝大部分时候执行效率高,代码越少也就越不容易出错。我认为好的程序员在写代码时,应该追求代码的正确性,简洁性和可读性,这恰恰就是pythonic的精神所在。

对于具有其他编程语言经验而初涉Python的程序员(比如我自己)来说,在写Python代码时,认识到pythonic的写法,会带来更多的便利和高效,而本文的主要读者也将是这群程序员。

以下将给出P和NP的n种示例,供读者和自己参考,查阅。

本文最后会列出参考资料,这些参考资料在我看来都极具价值。

P vs. NP的示例

链式比较

P:

a = 3
b = 1
 
1 <= b <= a < 10  #True
</div>

NP:

b >= 1 and b <= a and a < 10 #True
</div>

P是小学生都能看懂的语法,简单直接省代码~

真值测试

P:

name = 'Tim'
langs = ['AS3', 'Lua', 'C']
info = {'name': 'Tim', 'sex': 'Male', 'age':23 }   
 
if name and langs and info:
    print('All True!')  #All True!

</div>

NP:

if name != '' and len(langs) > 0 and info != {}:
    print('All True!') #All True!
</div>

简而言之,P的写法就是对于任意对象,直接判断其真假,无需写判断条件,这样既能保证正确性,又能减少代码量。

真假值表(记住了假你就能省很多代码!)

真 假
True False
任意非空字符串 空的字符串 ''
任意非0数字 数字0
任意非空容器 空的容器 [] () {} set()
其他任意非False None

字符串反转

P:

def reverse_str( s ):
    return s[::-1] 
</div>

NP:

def reverse_str( s ):
    t = ''
    for x in xrange(len(s)-1,-1,-1):
        t += s[x]
    return t
</div>
P的写法简单,经测试,效率也更好。

如果用于检测回文,就是一句话input == input[::-1],多么的优雅!

字符串列表的连接

P:

strList = ["Python", "is", "good"] 
 
res =  ' '.join(strList) #Python is good
</div>

NP:

res = ''
for s in strList:
    res += s + ' '
#Python is good
#最后还有个多余空格
</div>

string.join()常用于连接列表里的字符串,相对于NP,P的方式十分高效,且不会犯错。

列表求和,最大值,最小值,乘积

P:

numList = [1,2,3,4,5]  
 
sum = sum(numList)  #sum = 15
maxNum = max(numList) #maxNum = 5
minNum = min(numList) #minNum = 1
from operator import mul
prod = reduce(mul, numList) #prod = 120
</div>

NP:

sum = 0
maxNum = -float('inf')
minNum = float('inf')
prod = 1
for num in numList:
    if num > maxNum:
        maxNum = num
    if num < minNum:
        minNum = num
    sum += num
    prod *= num
# sum = 15 maxNum = 5 minNum = 1 prod = 120
</div>

经简单测试,在numList的长度为10000000时,在我的机器上对列表求和,P耗时0.6s,NP耗时1.3s,将近两倍的差距。所以不要自己造轮子了。

列表推导式

P:

l = [x*x for x in range(10) if x % 3 == 0]
#l = [0, 9, 36, 81]
</div>

NP:

您可能想查找下面的文章:

  • 让你的python代码更加pythonic(简练、明确、优雅)

相关文章

  • Lua的编译、执行和调试技术介绍
  • Ruby元编程技术详解(Ruby Metaprogramming techniques)
  • 使用Lua编写Nginx服务器的认证模块的方法
  • Lua中的迭代器(iterator)浅析
  • Lua实现类继承
  • Lua脚本语言简明入门教程
  • Lua和C++的通信流程代码实例
  • Lua math.fmod使用时的小数问题
  • ubuntu 14.04下熟悉lua的语法
  • 举例简介Lua中函数的基本用法

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • 举例详解Lua中的协同程序编程
    • 浅谈Lua的面向对象特性
    • 浅析Lua中的迭代器
    • LUA string库使用小结
    • Lua教程(四):在Lua中调用C语言、C++的函数
    • 实例讲解Lua中pair和ipair的区别
    • Lua中获取table长度的方法
    • Lua编程示例(八):生产者-消费者问题
    • Lua中__index和__newindex之间的沉默与合作
    • Lua教程(六):编译执行与错误

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有