zoukankan      html  css  js  c++  java
  • python eval lmbda

    ------------恢复内容开始------------

    eval() 函数用来执行一个"字符串表达式",并返回表达式的值。

    语法

    以下是 eval() 方法的语法:

    eval(expression[, globals[, locals]])

    参数

    • expression -- 表达式。
    • globals -- 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
    • locals -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。

    返回值

    返回表达式计算结果。

    >>>x = 7
    >>> eval( '3 * x' )
    21
    >>> eval('pow(2,2)')
    4
    >>> eval('2 + 2')
    4
    >>> eval('' '2 + 2' '')
    

      

    eval('' '2 + 2' '')???

     eval(<字符串或者字符串变量>),去除引号,并且执行去掉引号后的语句,如果去掉引号后依然是字符串(比方说”  ‘2+2’     "),则输出的仍然是字符串'2+2',但是如果是"1+1",则输出2.

    看到这可以回顾一下   lmbda函数:

    #1.函数式编程:
    例如:一个整数列表,要求按照列表中元素的绝对值大小升序排列
    >>> list1 = [3,5,-4,-1,0,-2,-6]
    >>> sorted(list1, key=lambda x: abs(x))
    [0, -1, -2, 3, -4, 5, -6]
    
    排序函数sorted支持接收一个函数作为参数,该参数作为 sorted的排序依据,这里按照列表元素的绝对值进行排序。
    
    当然,我也可以用普通函数来实现:
    >>> def foo(x):
    ...     return abs(x)
    ...
    >>> sorted(list1, key=foo)
    [0, -1, -2, 3, -4, 5, -6]
    只不过是这种方式代码看起来不够 Pythonic 而已。
    
    lambda:这是Python支持一种有趣的语法,它允许你快速定义单行的最小函数,可以用在任何需要函数的地方:
    >>> add = lambda x,y : x+y
    >>> add(5,6)
    11
    >>> (lambda x,y:x+y)(5,6)
    11
    
    #2.Python中最常见的filter筛选、map小刷子、reduce合并,都可以用lambda表达式来生成!
    对于序列来讲,有三个函数式编程工具: filter()、map()和reduce()。
    
    map(function,sequence):把sequence中的值当参数逐个传给function,返回一个包含函数执行结果的list。如果function有两个参数,即map(function,sequence1,sequence2)。
     
    #求1~20的平方
    >>> list(map(lambda x:x*x,range(1,21))) #Python2.x使用map(lambda x:x*x,range(1,21))
    [1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400]
    
    filter(function,sequence):对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple(取决于sequence的类型)返回。
     
    #求1~20之间的偶数
    >>> list(filter(lambda x:x%2 == 0,range(1,21))) #Python2.x使用filter(lambda x:x%2 == 0,range(1,21))
    [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
    
    reduce(function,sequence):function接收的参数个数只能为2,先把sequence中第一个值和第二个值当参数传给function,再把function的返回值和第三个值当参数传给function,然后只返回一个结果。
     
    #求1~100之和
    >>> from functools import reduce          #Python3.x之后需要导入reduce模块
    >>> reduce(lambda x,y:x+y,range(1,101))
    5050
    
    #求1~100之和,再加上10000
    >>> reduce(lambda x,y:x+y,range(1,101),10000)
    15050
    
    #3.闭包
    闭包:一个定义在函数内部的函数,闭包使得变量即使脱离了该函数的作用域范围也依然能被访问到。
    
    来看一个用lambda函数作为闭包的例子。
    >>> def add(n):
    ...     return lambda x:x+n
    ...
    >>> add2 = add(5)
    >>> add2(15)
    20
    
    这里的lambda函数就是一个闭包,在全局作用域范围中,add2(15)可以正常执行且返回值为20。之所以返回20是因为在add局部作用域中,变量n的值在闭包的作用使得它在全局作用域也可以被访问到。
    

      

  • 相关阅读:
    atitit.为什么java体系开发效率这样低的原因and解决
    使用11g DNFS建立基于DNFS的tablespace
    MalformedObjectNameException: Invalid character '' in value part of property
    Spring MVC DispatcherServlet绑定多种URL
    chrome与pdf的事情
    JSP获取绝对物理地址
    spring mvc 与 jasper Report集成
    HttpServletRequest和ServletRequest的区别
    aJax请求结果中包含form的问题
    javascript与java编码互转
  • 原文地址:https://www.cnblogs.com/BBS2013/p/13390484.html
Copyright © 2011-2022 走看看