zoukankan      html  css  js  c++  java
  • 函数(二):input、raw_input、lambda、repr、map、filter、reduce、eval、exec、range、xrange

    一、input()和raw_input():

    input()支持用户输入数字或表达式,按类型存或存表达式的计算结果

    raw_input():输入所有内容当成字符串存

    二、lambda函数:匿名函数

    lambda只是一个表达式,函数体比def简单的多

    lambda的主体是一个表达式,而不是一个代码块。

    lambda函数拥有自己的名字空间,且不能访问自由参数列表之外全局名字空间里的参数

    lambda会返回一个函数对象,但这个对象不会赋值给一个标识符,而def则会把函数对象赋值给一个变量(函数名)

    if或for或print等语句不能用于lambda中 lambda函数不能共享给别的程序调用,def定义的函数可以

    语法 :

    lambda [arg1[,arg2[,arg3...argn]]]:expression

    >>> list1=[lambda a:a**3,lambda b:b**2]

    >>> print list1

    [<function <lambda> at 0x0000000003449A58>, <function <lambda> at 0x0000000003449AC8>]

    >>> print list1[0]

    <function <lambda> at 0x0000000003449A58>

    >>> print list1[1]

    <function <lambda> at 0x0000000003449AC8>

    >>> g=list1[0]

    >>> g(3)

    27

    >>> h=list1[1]

    >>> h(2)

    4

    >>> h(4)

    16

    >>>

    三、repr函数

    用来取得对象的规范字符串表示。

    反引号(也称转换符`)可以完成相同的功能。

    注意:大多数时候有eval(repr(object))==object 可以通过定义类的__repr__方法来控制你的对象在被repr函数调用的时候返回的内容。

    四、map函数

    将每个列表元素或字符串都执行某个函数

    map函数的操作方法:

    它将每个字符串或者列表元素,应用某个函数方法,结果返回列表。

    将函数func作用于这个seq的每个元素上,并得到一个新的seq.

    >>> a=[1,2,3,4]

    >>> lista=map(str,a)

    >>> print lista ['1', '2', '3', '4']

    >>>

    >>> map(int,"12345")

    [1, 2, 3, 4, 5]

    >>>

    >>> map(lambda x,y:x+y,[2,4,6],[3,2,1])

    [5, 6, 7]

    >>>

    map函数无法处理seq长度不一致、对应位置操作数类型不一致的情况,会报类型错误。

    >>> map(lambda x,y:(x**y,x+y),[2,4,6],[3,2,4,5])  #报错

    Traceback (most recent call last):   File "<stdin>", line 1, in <module>   File "<stdin>", line 1, in <lambda>

    TypeError: unsupported operand type(s) for ** or pow(): 'NoneType' and 'int'

    >>> map(lambda x,y:(x**y,x+y),[2,4,6],[3,2,4])

    [(8, 5), (16, 6), (1296, 10)]

    >>>

    五、filter函数:

    filter()函数可以对序列做过滤处理,就是说可以使用一个自定义的函数,过滤一个序列 ,把序列的每一项传到自定义的过滤函数里处理,并将返回结果做过滤。最终一次性返回过滤后的 结果。

    filter()函数有两个参数:

    第一个是:自定义函数名,必须的

    第二个是:需要过滤的序列,也是必须的

    >>> def getsomenum(num):

    ...     if num>5 and num<10:

    ...         return num

    ...

    >>> seq=[12,50,6,5,1,3,11,7,9,10]

    >>> filter(getsomenum,seq)

    [6, 7, 9]

    >>>

    六、reduce内建函数

    reduce内建函数是一个二元操作函数,用来将一个集合(链表,元组等)中的所有数据进行下列 操作:

    用传给reduce中的函数func()(必须是一个二元操作函数)先对集合的第1,2个数据进行操作 ,得到的结果再与第三个数据用func()函数运算,最后得到一个结果。(是一个累积的结果)

    >>> reduce(lambda x,y:x+y,[1,2,3,4,5])

    15

    >>>

    >>> reduce(lambda x,y:x+y,[1,2,3,4,5],0)  #第一次把0给x,列表给y

    15

    >>>

    >>> def fn(x,y):

    ...     return x*10+y

    ...

    >>> def char2num(s):

    ...     return{"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9}[s]

    ...

    >>> reduce(fn,map(char2num,"13579"))

    13579

    >>>

    七、exec函数:

    有时候可能会需要动态地创建python代码,然后将其他为语句或作为表达式去执行。

    exec语句用来执行存储在字符串或文本中有效的python语句。

    >>> exec("print 'hello python'")

    hello python

    >>>

    >>> def printsrt():

    ...print "hello word"

    ... >>>

    >>> exec("printsrt()")

    hello word

    >>>

    八、eval函数

    eval()语句用来计算存储在字符串中的有效Python表达式,并返回计算结果

    >>> s="3*4+18"

    >>> eval(s)

    30

    >>>

    >>> def printStr():

    ...     print "hello word"

    ...     return 1

    ...

    >>> print eval("printStr()")

    hello word

    1

    >>>

    >>> a="[[1,2],[3,4],[5,6]]"

    >>> print eval(a)

    [[1, 2], [3, 4], [5, 6]]

    >>> b="{1:'xx',2:'yy'}"

    >>> print eval(b)

    {1: 'xx', 2: 'yy'}

    >>> c="(1,2,3,4)"

    >>> print eval(c)

    (1, 2, 3, 4)

    >>>

    >>> list1=[1,2,3,4]

    >>> type(`list1`)

    <type 'str'>

    >>> type(eval(`list1`))

    <type 'list'>

    >>> print eval(`list1`)

    [1, 2, 3, 4]

    >>>

    九、exec与eval的区别:

    exec()和eval()都可以动态的执行存储在字符串或文本中的有效python表达式;

    区别:

    exec()执行python语句没有返回值;

    而eval()有返回值

    十、range和xrange的区别:

    rang会直接生成一个list对象;

    xrange不会直接生成一个list,而是每次调用返回其中的一个值【xrange返回的是一个生成器】

    >>> a=range(1,100)

    >>> type(a)

    <type 'list'>

    >>> b=xrange(1,100)

    >>> type(b)

    <type 'xrange'>

    >>>

  • 相关阅读:
    手机号码为字母或者符号(回退)
    总结:Python的赋值、深拷贝、浅拷贝有什么区别
    Python安装Mysqlclient的坑
    MySQL数据库安装和Navicat for MySQL配合使用
    chrome打开开发者工具之后看不到请求头信息——F12的使用(一)
    常见dos命令汇总
    如何编写高质量的简历-学习笔记
    windows环境搭建禅道项目管理工具
    Web接口测试工具--Jmeter
    不要把测试工具当饭吃
  • 原文地址:https://www.cnblogs.com/reyinever/p/8035354.html
Copyright © 2011-2022 走看看