Python之列表生成式 生成器 异步I/O模型epoll 递归函数 函数式编程的定义 高阶函数

本篇主要介绍  列表生成式  生成器  递归函数 函数式编程的定义 高阶函数


1.列表生成式

列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式

示例:
# 1~20,所有偶数的平方
print [ i*i for i  in range(0,20,2)]
print [ i*i for i  in range(0,20) if i %2 == 0]

#将列表中的字符全部转化为小写
print [i.lower() for i in li if isinstance(i, str)]

1.1.  判断数据类型是否为可迭代数据类型
In [25]: from collections import  Iterable
In [26]: isinstance('hello',Iterable)
Out[26]: True

1.2. 枚举方法,显示为索引-元素对
shopinfo = [('Iphone',1000),  ('book',200), ('fentiao',3500)]
for i,v in enumerate(shopinfo):
    print i,v

2..生成器generator

 2.1 生成式的定义

     通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

      所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器。

       要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator。

       还可以使用关键字yield

       所以,我们创建了一个generator后,基本上永远不会调用next()方法,而是通过for循环来迭代它。

generator非常强大。如果推算的算法比较复杂,用类似列表生成式的for循环无法实现的时候,还可以用函数来实现。比如,著名的斐波拉契数列(Fibonacci)。

2.2 生成器的特点

 1). 列表生成式受到内存的限制,列表容量是有限的;
 2). 列表生成式如果只需要前几个元素,浪费内存空间。
2.3.  访问生成式:
         - for循环
         - g.next()方法
l = [i for i in range(1000)]        # 列表生成式
g = (i for i in range(1000))        # 生成器
g.next()
for i in g:
    print i

2.4. 手动实现生成器


定义一函数fib,实现斐波那契数列(Fibonicci):


 
3. 通过yield实现单线程的并发运算
# 异步I/O模型epoll 




4.. 递归函数   

4.1 递归与循环在编程模型和思维模型上最大的区别则在于:

                            循环是在描述我们该如何地去解决问题。

                            递归是在描述这个问题的定义。

###求一个整数的阶乘

def fact(n):
    if not isinstance(n,int):
        print 'input int num'
    if n == 1:
        return 1
    return fact(n-1)*n
print fact(3)

4.2 递归的特点
1). 在写递归函数时要有一个明确的结束条件;
2). 在递归时,问题规模要越来越小;
3). 递归函数效率不高,函数调用是通过栈的数据结构实现的,
4). 每调用依次,栈就会多一层,最多999层,否则会出现栈溢出。

 5. 函数式编程  
    函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念

     在函数式编程中,函数是基本单位,是第一型,他几乎被用作一切,包括最简单的计算,甚至连变量都被计算所取代。在函数式编程中,变量只是一个名称,而不是一个存储单元,这是函数式编程与传统的命令式编程最典型的不同之处

     f(x) = y ,那么这个函数无论在什么场景下,都会得到同样的结果,这个我们称之为函数的确定性。

     函数式编程取消了赋值模型,则使数学模型与编程模型完美地达成了统一

6.. 高阶函数 
6.1定义:一个函数接收另一个函数作为参数,这种函数就称之为高阶函数

6.1  map()

     map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。


  6.3  reduce():reduce函数也有两个参数,一个是函数,另一个是列表,返回值为对list的每一个元素反复调用函数f,得到最终结果,以下函数为连乘;


6.4 filter():filter函数接受函数参数f和列表参数lst,f对lst元素进行判断,返回lst的元素中调用f函数结果为true的元素组成的列表(将不满足f函数条件的元素过滤掉)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值