Python 总结:进阶1

来源:互联网 发布:amv格式视频软件 编辑:程序博客网 时间:2024/04/20 07:39

Python 总结:进阶1

  • Python 总结进阶1
    • 函数参数传递
    • 字典
    • 循环对象
    • 生成器
    • 函数对象
    • 一些特殊的内置函数

1. 函数参数传递

  • 对于基本数据类型,是值传递,变量传递给函数后函数在内存复制一个新的变量,再对这个新的变量操作,原变量不受影响。

  • 对于表这种变量,是指针传递,类似C/C++中指针的概念,传的是地址。

2. 字典

  • 定义一个字典:

    dic = {}dic =  {'tom':11, 'sam':57,'lily':100}
  • 字典不能通过下标来引用元素,只能是通过键:

    dic['tom'] = 30

3. 循环对象

  • 循环对象包含一个next()方法(在python3中是__next__()方法)每次都会返回到下一个结果,在结束一系列结果之后,举出StopIteration错误:

    # 以下代码在终端输入,通过文件运行,注意下面是python3的输入方式>>>f = open('test.txt')>>>f.__next__()>>>f.__next__()

4. 生成器

  • 编写生成器和函数类似,只是在return的地方改为yield。生成器中可以有多个yield。当生成器遇到一个yield时,会暂停运行生成器,返回yield后面的值。当再次调用生成器的时候,会从刚才暂停的地方继续运行,直到下一个yield。生成器自身又构成一个循环器,每次循环使用一个yield返回的值:

    def gen():    a = 100    yield a    a = a*8    yield a    yield 1000for i in gen():    print i"""     运行结果如下: 100 800 1000"""

5 函数对象

  • lambda函数,可以利用lambda函数的语法定义函数:

    func = lambda x,y: x+yprint(func(1,3))
  • 函数可以作为一个对象,进行参数传递。函数名(比如func)即该对象:

    def test(f, a, b):  print 'test'  print f(a, b)test(func, 3, 5)

6. 一些特殊的内置函数

  • map()函数:下面例子中map()有两个参数,一个是lambda所定义的函数对象,一个是包含有多个元素的表。map()的功能是将函数对象依次作用于表的每一个元素,每次作用的结果储存于返回的表re中:

    # map()的功能是将函数对象依次作用于表的每一个元素,每次作用的结果储存于返回的表re中。re = map((lambda x: x+3),[1,2,3])# map()将每次从两个表中分别取出一个元素,带入lambda所定义的函数。re = map((lambda x,y: x+y),[1,2,3],[6,7,8])"""在Python 3.X中,map()的返回值是一个循环对象。可以利用list()函数,将该循环对象转换成表。所以运行结果如下:>>> list(re)[7, 9, 11]"""
  • filter()函数:filter函数的第一个参数也是一个函数对象。它也是将作为参数的函数对象作用于多个元素。如果函数对象返回的是True,则该次的元素被储存于返回的表中。需要注意的是,在Python 3.X中,filter返回的不是表,而是循环对象:

    def func(a):    if a > 100:        return True    else:        return Falseprint filter(func,[10,56,100,200,300])"""Python3下应该写成:re = list(filter(func,[10,56,100,200,300]))print(re)运行结果:[200,300]"""
  • reduce()函数:reduce函数的第一个参数也是函数,但有一个要求,就是这个函数自身能接收两个参数。reduce可以累进地将函数作用于各个参数。下例中,reduce的第一个参数是lambda函数,它接收两个参数x,y, 返回x+y。reduce将表中的前两个元素(1和2)传递给lambda函数,得到3。该返回值(3)将作为lambda函数的第一个参数,而表中的下一个元素(5)作为lambda函数的第二个参数,进行下一次的对lambda函数的调用,得到8。依次调用lambda函数,每次lambda函数的第一个参数是上一次运算结果,而第二个参数为表中的下一个元素,直到表中没有剩余元素。

    print(reduce((lambda x,y: x+y),[1,2,3,4,5]))"""提醒: reduce()函数在3.0里面不能直接用的,它被定义在了functools包里面,需要引入包。运行结果是:(((1+2)+3)+4)+5=15"""


    Reference:http://www.cnblogs.com/vamei

0 0
原创粉丝点击