免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2287 | 回复: 1
打印 上一主题 下一主题

你可能所不知道的python中有用的特性 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-22 13:06 |只看该作者 |倒序浏览
你可能所不知道的python中有用的特性



1.链式操作符,要注意执行顺序问题,方法是加括号。

Python代码   
5.True
  1. >>> x = 5
  2. >>> 10 < x < 20
  3. False
  4. >>> x < 10 < x*10 < 100
  5. True
复制代码
2.debug regex

Python代码
  1. >>> re.compile("""
  2. ^              # start of a line
  3. \[font         # the font tag
  4. (?:=(?P<size>  # optional [font=+size]
  5. [-+][0-9]{1,2} # size specification
  6. ))?
  7. \]             # end of tag
  8. (.*?)          # text between the tags
  9. \[/font\]      # end of the tag
  10. """, re.DEBUG|re.VERBOSE|re.DOTALL)
复制代码
另附name match:

Python代码  
4.'Lots'
  1. >>> p = re.compile(r'(?P<word>\b\w+\b)')
  2. >>> m = p.search( '(((( Lots of punctuation )))' )
  3. >>> m.group('word')
  4. 'Lots'
复制代码
3.generator object
可以节省内存,但是只能使用一次

4.同时yield列表中的项和序号。

Python代码
  1. >>> a = ['a', 'b', 'c', 'd', 'e']
  2. >>> for index, item in enumerate(a): print index, item
复制代码
5.iter() can take a callable argument


Python代码
  1. def seek_next_line(f):
  2.     for c in iter(lambda: f.read(1),'\n'):
  3.         pass
复制代码
The iter(callable, until_value) function repeatedly calls callable and yields its result until until_value is returned.

6.Decorators
下面的评论中有人说这已经不算太hidden了

7.yield中send的使用

8.
Python代码
  1. a = [1,2,3,4,5]
  2. >>> a[::2]  # iterate over the whole list in 2-increments
  3. [1,3,5]
复制代码
反转
Python代码
  1. >>> a[::-1]
  2. [5,4,3,2,1]
复制代码
对比
Python代码
  1. >>> list(reversed(range(4)))#这种方法返回的是iterator
  2. [3, 2, 1, 0]
复制代码
9.默认参数可能会变

Python代码
  1. >>> def foo(x=[]):
  2. ...     x.append(1)
  3. ...     print x
  4. ...
  5. >>> foo()
  6. [1]
  7. >>> foo()
  8. [1, 1]
  9. >>> foo()
  10. [1, 1, 1]
复制代码
Instead, you should use a sentinel value denoting "not given" and replace with the mutable you'd like as default:


Python代码
  1. >>> def foo(x=None):
  2. ...     if x is None:
  3. ...         x = []
  4. ...     x.append(1)
  5. ...     print x
  6. >>> foo()
  7. [1]
  8. >>> foo()
  9. [1]
复制代码
默认参数不过是函数的一个属性foo.func_defaults而已,因此对于list类型的可能会变动

10.defaultdict可以增强dict

Python代码
  1. >>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
  2. >>> d = defaultdict(list)
  3. >>> for k, v in s:
  4. ...     d[k].append(v)
  5. ...
  6. >>> d.items()
  7. [('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
复制代码
相当于

Python代码
  1. >>> d = {}
  2. >>> for k, v in s:
  3. ...     d.setdefault(k, []).append(v)
复制代码
对于列表中的每个key,如果该defaultdict中不存在,会使用default_factory来创建该值

11.for..else

对于丑陋的代码

Python代码
  1. found = False
  2. for i in foo:
  3.     if i == 0:
  4.         found = True
  5.         break
  6. if not found:
  7.     print("i was never 0")
复制代码
可以使用下面代码来替代

Python代码
  1. for i in foo:
  2.     if i == 0:
  3.         break
  4. else:
  5.     print("i was never 0")
复制代码
else在for循环从来没有break时调用,有人提议这个关键字else实际上用finally更合适。

12.值替换,“,”隐含的构成了一个tuple

Python代码
  1. 1.>>> a = 10  
  2. 2.>>> b = 5  
  3. 3.>>> a, b   
  4. 4.(10, 5)   
  5. 5.  
  6. 6.>>> a, b = b, a   
  7. 7.>>> a, b   
  8. 8.(5, 10)  
复制代码

论坛徽章:
0
2 [报告]
发表于 2011-03-22 14:00 |只看该作者
好多特性都第一次看到,我真是孤陋寡闻了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP