飞道的博客

10个 Python 高效编程小技巧

284人阅读  评论(0)

初识Python语言,觉得python满足了你上学时候对编程语言的所有要求。python语言的高效编程技巧让那些曾经苦逼学了四年c或者c++的人,兴奋的不行不行的,终于解脱了。高级语言,如果做不到这样,还扯啥高级呢?

01 交换变量


  
  1. >>>a=3
  2. >>>b=6
  3. 复制代码

这个情况如果要交换变量在c++中,肯定需要一个空变量。但是python不需要,只需一行,大家看清楚了


  
  1. >>>a,b=b,a
  2. >>>pr int(a)>>> 6
  3. >>>pt int(b)>>> 5
  4. 复制代码

02 字典推导(Dictionary comprehensions)和集合推导(Set comprehensions)

大多数的Python程序员都知道且使用过列表推导(list comprehensions)。如果你对list comprehensions概念不是很熟悉——一个list comprehension就是一个更简短、简洁的创建一个list的方法。


  
  1. >>> some_list = [ 12345]
  2. >>> another_list = [ x +  1  for x  in some_list ]
  3. >>> another_list
  4. [ 2, 3, 4, 5, 6]
  5. 复制代码

自从python 3.1 起,我们可以用同样的语法来创建集合和字典表:


  
  1. >>>  # Set Comprehensions
  2. >>> some_list = [ 1234525148]
  3. >>> even_set = { x  for x  in some_list  if x %  2 ==  0 }
  4. >>> even_set
  5. set([ 824])
  6. >>>  # Dict Comprehensions
  7. >>> d = { x: x %  2 ==  0  for x  in  range( 111) }
  8. >>> d
  9. { 1False2True3False4True5False6True7False8True9False10True}
  10. 复制代码

在第一个例子里,我们以some_list为基础,创建了一个具有不重复元素的集合,而且集合里只包含偶数。而在字典表的例子里,我们创建了一个key是不重复的1到10之间的整数,value是布尔型,用来指示key是否是偶数。这里另外一个值得注意的事情是集合的字面量表示法。我们可以简单的用这种方法创建一个集合:


  
  1. >>> my_set = { 121234}
  2. >>> my_ set
  3. set( [1234])
  4. 复制代码

而不需要使用内置函数set()。

03 计数时使用Counter计数对象

这听起来显而易见,但经常被人忘记。对于大多数程序员来说,数一个东西是一项很常见的任务,而且在大多数情况下并不是很有挑战性的事情——这里有几种方法能更简单的完成这种任务。

Python的collections类库里有个内置的dict类的子类,是专门来干这种事情的:


  
  1. >>>  from collections import Counter
  2. >>> c =  Counter( hello world )
  3. >>> c
  4. Counter({  l 3,   o 2,     1,   e 1,   d 1,   h 1,   r 1,   w 1})
  5. >>> c. most_common( 2)
  6. [( l ,  3), ( o ,  2)]
  7. 复制代码

04 漂亮的打印出JSON

JSON是一种非常好的数据序列化的形式,被如今的各种API和web service大量的使用。使用python内置的json处理,可以使JSON串具有一定的可读性,但当遇到大型数据时,它表现成一个很长的、连续的一行时,人的肉眼就很难观看了。

为了能让JSON数据表现的更友好,我们可以使用indent参数来输出漂亮的JSON。当在控制台交互式编程或做日志时,这尤其有用:


  
  1. >>>  import json
  2. >>>  print(json.dumps(data))   # No indention
  3. { "status""OK""count"2"results": [{ "age"27"name""Oz""lactose_intolerant"true}, { "age"29"name""Joe""lactose_intolerant"false}]}
  4. >>>  print(json.dumps(data, indent= 2))   # With indention
  5. {
  6.    "status""OK",
  7.    "count"2,
  8.    "results": [
  9.     {
  10.        "age"27,
  11.        "name""Oz",
  12.        "lactose_intolerant"true
  13.     },
  14.     {
  15.        "age"29,
  16.        "name""Joe",
  17.        "lactose_intolerant"false
  18.     }
  19.   ]
  20. }
  21. 复制代码

同样,使用内置的pprint模块,也可以让其它任何东西打印输出的更漂亮。

05 解决FizzBuzz

前段时间Jeff Atwood 推广了一个简单的编程练习叫FizzBuzz,问题引用如下:

写一个程序,打印数字1到100,3的倍数打印“Fizz”来替换这个数,5的倍数打印“Buzz”,对于既是3的倍数又是5的倍数的数字打印“FizzBuzz”。

这里就是一个简短的,有意思的方法解决这个问题:


  
  1. for x  in  range( 1, 101):
  2.      print "fizz"[x% 3* len( fizz )::]+ "buzz"[x% 5* len( buzz )::]  or x
  3.     
  4. 06  if 语句在行内
  5. print  "Hello"  if  True  else  "World"
  6. >>> Hello
  7. 复制代码

07 连接

下面的最后一种方式在绑定两个不同类型的对象时显得很cool。


  
  1. nfc = [ "Packers""49ers"]
  2. afc = [ "Ravens""Patriots"]
  3. print nfc + afc
  4. >>> [ Packers ,   49ers ,  Ravens ,  Patriots ]
  5. print str( 1) +  " world"
  6. >>>  1 world
  7. print  `1` +  " world"
  8. >>>  1 world
  9. print  1"world"
  10. >>>  1 world
  11. print nfc,  1
  12. >>> [ Packers ,   49ers ]  1
  13. 复制代码

08 数值比较

这是我见过诸多语言中很少有的如此棒的简便法


  
  1. x =  2
  2. if  3 > x >  1:
  3.     print x
  4. >>>  2
  5. if  1 < x >  0:
  6.     print x
  7. >>>  2
  8. 复制代码

09 同时迭代两个列表


  
  1. nfc = [ "Packers""49ers"]
  2. afc = [ "Ravens""Patriots"]
  3. for teama, teamb  in  zip(nfc, afc):
  4.       print teama +  " vs. " + teamb
  5. >>> Packers vs. Ravens
  6. >>> 49ers vs. Patriots
  7. 复制代码

10 带索引的列表迭代


  
  1. teams = [ "Packers""49ers""Ravens""Patriots"]
  2. for  index, team in enumerate(teams):
  3.      print  index, team
  4. >>>  0 Packers
  5. >>>  1  49ers
  6. >>>  2 Ravens
  7. >>>  3 Patriots

 


转载:https://blog.csdn.net/weixin_73136678/article/details/128555112
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场