写的代码又被喷?8招让你的代码更Pythonic

Python是一门非常灵活的语言,很多语法是其他语言不具备的,特别是对于从C、Java等语言转向Python的人来说,很容易按照C、Java等语言的写法来写Python,对于初学者来说,如果对Python语言的理解不够透彻,就会写出很冗余的代码来。

这篇文章,主要介绍几个简单技巧,让你在写Python代码,更Pythonic。

变量交换

  • Pythonic写法

  • 普通写法

循环遍历区间元素

在Python2中,有range和xrange2种写法,xrange是生成器写法,更节省内存。Python3中的range等价于Python2中的xrange。

生成器,只有在使用时才会动态生成,而且只能使用1次,比如range(1000000),Python2中会在内存中生成1百万个元素的列表,而在Python3不会生成列表,而是生成器,占用很小的内存。

如何你还在使用Python2,建议用xrange代替range

  • Java的写法

  • 生成器扩展

索引

  • Pythonic写法  

  • 普通写法  

显然,Pythonic写法更加直观,优雅。

字符串拼接

  • Pythonic写法  

  • 普通写法

每次+操作都会产生新字符串,造成内存浪费,而join,整个过程中只会产生一个字符串对象

文件打开与关闭

  • Pythonic写法

  • 普通写法  

使用with,Python将自动管理文件流的打开与关闭,无需手动操作

列表操作

  • Pythonic写法 

  • 普通写法 

list也可以用pop(0)来删除第一个元素,但是list在内存中是顺序存储的,删除第一个元素,会导致之后的所有元素都会前移,效率很低,插入类似。

开头如果有大量的删除和插入操作,避免使用list

解构赋值

  • Pythonic写法 

  

 

字典也类似,在Python2中,字典的items方法将返回列表,当字典比较大时,这样会很耗内存。而iteritems方法返回的是生成器。

Python3中,没有iteritems,items等价于Python2的iteritems。

如果在使用Python2,请用iteritems代替items

推导式

  • Pythonic写法 

  • 普通写法 

作者:呆兔兔

来源:51CTO

时间: 2024-11-16 19:16:41

写的代码又被喷?8招让你的代码更Pythonic的相关文章

用Go语言写Android应用 (2) - 从Android的Java调用Go代码

用Go语言写Android应用 (2) - 从Android的Java调用Go代码 上一篇我们讲到,Go在Android中的作用,就相当于NDK中的C/C++.上节我们学习了参照NDK的方式用纯Go语言来写应用. 但是,也正如在Android中,C/C++主要是通过JNI的方式被Java代码调用,本节我们就学习如何使用Java代码来调用Go代码. Java调Go的JNI例子 Java部分 我们首先来看这个简单得不能再简单的Java部分的代码,只有一个TextView,然后调用Go写的Hello.

debug-eclipse用java写web项目,操作页面时怎么证明哪些代码,哪些方法被调用执行了

问题描述 eclipse用java写web项目,操作页面时怎么证明哪些代码,哪些方法被调用执行了 跑web项目,在页面进行操作,怎么查明这个操作调用了哪些类的哪些方法以及执行顺序,本人不怎么会调试,能具体点最好,感激不尽 解决方案 楼主可能没有工作吧,其实这个问题稍微有个人简单一说就会了,从浏览器要学会使用开发者模式,例如firefox的debug模式,这个可以查看页面操作 后发送了哪些请求,然后得到了什么响应,请求就可以知道你调用了哪个Action,从而知道调用后台哪些方法,后台如果用ecli

c语言-求帮忙补充下 写成能在C环境下能编译的代码

问题描述 求帮忙补充下 写成能在C环境下能编译的代码 先读入数据建立顺序表va,表中的数据元素递增有序,再读入一个整数x,将它插入到顺序表中的适当位置,并保持顺序表的有序性. 输入:先输入一个小于100的正整数n,紧接着读入n个从小到大的正整数,建立顺序表,最后再读入一个正整数x,把它插入到顺序表中的适当位置,并保持顺序表的有序性. 输出:按顺序输出整个顺序表,输出的每个元素占一行. Status InsertOrderList(SqList &va,int x) { int i; if(va.

编程-删掉那个写着颜色的按钮,留下另一个写 着数字的按钮,该注释掉哪些代码?

问题描述 删掉那个写着颜色的按钮,留下另一个写 着数字的按钮,该注释掉哪些代码? 我想把图中所指的两个东东有一个删掉,比如删掉那个写着颜色的按钮,留下另一个写 着数字的按钮,该注释掉哪些代码? 解决方案 从29-35行. 解决方案二:

VS开发中的代码编写小技巧——避免重复代码编写的几种方法

原文:VS开发中的代码编写小技巧--避免重复代码编写的几种方法 上一篇文章中程序员的幸福生活--有你的日子,每天都是情人节,收到了大家的很多好评.鼓励和祝福,非常感动,真诚的谢谢大家.也希望每个朋友都能保持一个积极向上的心态,去迎接丰富多彩的人生. 在开发过程中,我们经常会遇到大量重复或者类似的代码需要编写,当然我们可以通过各种模式来避免这种情况出现,但肯定有些时候我们是无法避免的,那么遇到这种情况,我们该如何快速完成这些重复或类似的代码的编写呢.下面来说一下我的方法,当然,如果大家有更好的方法

VS2008为何修改发代码不会执行,还是执行原来代码。

问题描述 VS2008写的WEB网页,为何修改发代码不会执行,还是执行原来代码. 解决方案 解决方案二:修改了代码还必须要重新编译.发布才能更新.解决方案三:ASP.NET如果是website项目,是动态编译页面,可以马上看到效果而webapplication项目必须重新生成页面才可以看到效果解决方案四:是不是缓存的问题,清空原先的文件在生成解决方案五:是以前版本的代码,新建文件后重写代码后正常.解决方案六:如果不编译,直接执行,有错误的情况下,会提示你debug或按原来的方案执行如果点了以原来

2016年最热门的15 款代码语法高亮工具,美化你的代码_javascript技巧

前言: 代码高亮很有用,特别是在需要在网站或者blog中显示自己编写的代码的时候,或者给其他人查看或调试语法错误的时候.我们可以将代码高亮,以便阅读者可以十分方便的读取代码块,增加用户阅读代码的良好体验. 语法高亮是文本编辑器用来显示文本的,特别是源代码,根据不同的类别来用不同的颜色和字体显示.这个功能有助于编写结构化的语言,比如编程语言,标记语言,这些语言的语法错误显示是有区别的.语法高亮并不会影响文本自身的意义,而且能很好的符合人们的阅读习惯. 目前,有很多免费而且有用的代码高亮脚本.这些脚

代码之美~Func让构造方法为属性赋值更灵活

有时我们习惯上把基类中属性的赋值权限放在它的构造方法上,这样给我们感觉更直接,也更安全,这也体现了面向对象的封装性,即将不想开放的东西隐藏到类内部,当进行.net3.5时代后,属性的定义显得更加美观和合理,看下面是几种具有不同读写权限的属性. 1 /// <summary> 2 /// 完全公开 3 /// </summary> 4 public string ErrorMessage { get; set; } 5 /// <summary> 6 /// 读完全公开,

path-c++代码,请高手帮我看一下这个代码怎么修改

问题描述 c++代码,请高手帮我看一下这个代码怎么修改 return 0; } TCHAR szPath[MAX_PATH] = { 0 }; HRESULT hr; hr = SHGetFolderPath(NULL, CSIDL_PERSONAL, NULL, SHGFP_TYPE_CURRENT, szPath); if(SUCCEEDED(hr)) { CString strPath = szPath; strPath += _T("\temp"); hr = ::URLDow