码迷,mamicode.com
首页 > 编程语言 > 详细

学习python的日常3

时间:2017-12-01 23:38:14      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:pytho   装饰器   lambda   reduce   排列   完成   key   next   方式   

python的一些高级特性:

  切片(跟名字一样,把一个完整的东西选取一部分自己想要的去切下来):通过切片可以快速的去除一些元素,只要确定好索引位置,避免的循环导致的多写代码

数组,元组,字符串都可以用切片来获取元素,[x:y]表示从索引位置x开始索引到y位置,不包括y

[x:]从x开始索引到结束,[:y]从0开始索引到y为止(不包括y),[x:y:z]z表示每z个数获取一个数。

迭代:python中的迭代是通过for...in来完成的,只要有迭代对象,都可以迭代,dict的存储不是按照

list的方式顺序排列,所以可能会不一样的结果顺序,dict中默认迭代key,用for value in x.values()可以

实现迭代value,用for x,y in d.items()可以同时迭代dict中的key和value,利用collections模块的iterable类型去判断,

from collections import Iterable
isinstance(‘abc‘,Iterable)

如果是要对list实现类似java的下表循环,python中enumerate函数可以把list变成索引-元素对

for i,value in enumerate([‘A‘,‘B‘,‘C‘]):
    print(i,value)
...
0 A
1 B
2 C

for循环中是可以同时引用两个变量的

for(x,y) in ([1,1],[2,3],[3,9]):
    print(x,y)

列表生成式:列表生成式用很简洁的代码实现一个列表的创建,按照自己的需求,可以对同一变量进行不同操作来生成list,也可以对两个变量同时进行操作来生成list,也可以调用方法来生成需求的list(如果原list中的数据类型是不同的,可以加一个额外的判断条件,if isinstance(x,数据类型)。

[x(运算符)x for x in 迭代对象 if 判断条件]

[m + n for m in ‘ABC‘ for n in ‘XYZ‘] 

[s.xxxx() for s in L]

生成器:把列表生成改成generator,也可以通过函数实现复杂逻辑的generator,generator的工作原理是在for循环的过程中不断计算出下一个元素,

并在适当的条件结束for循环。函数改成的generator,遇到return语句或者执行到函数体的最后一行语句,就是结束generator的指令,for循环也随之结束。

迭代器:能够 被for循环的对象都是Iterable类型,能够作用于next()函数的对象都是Iterator()类型,表示一个惰性计算的序列,无法提前知道序列的长度,只能通过next()函数按需计算出下一个数据,只有在需要返回下一个数据时才会进行计算。

 

函数式编程:

高阶函数中,map()函数接收两个参数,一个函数,一个Iterable,map会作用于序列中的每一个元素,

并把结果作为新的Iterator返回;   reduce()函数同样是接收两个参数,不同的是reduce利用函数作用于

元素之后,元素处理的结果会作为新的元素继续参与函数的处理,最后返回一个结果。

filter()函数是一个筛选器,用法和map()类似,不过最后返回结果的时候只有结果为True是才会返回该结果,其余舍弃掉,返回的也是一个Iterator。

sorted()函数是一个用于排序的函数作为一个高阶函数,可以接收一个key函数来实现自定义的排序,在keys中排序后,再将相应的value值排序结果展示出来

反向排序可以传入第三个参数reverse = True。

返回函数:函数可以返回一个计算结果,也可以返回一个函数,返回一个函数时,这个函数并没有被执行,所以函数中最好不要引用可能变化的变量

匿名函数:lambda x:x*x   其中x是函数的参数,匿名函数的表达式的结果就是他的返回值。

装饰器:本身是一个高阶函数,可以返回函数,然后的话可以增强函数的功能,其中functools.wraps可以使得函数的.__name__属性不会被替换

 

 

 

 

 

学习python的日常3

标签:pytho   装饰器   lambda   reduce   排列   完成   key   next   方式   

原文地址:http://www.cnblogs.com/zzy0306/p/7944496.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!