美文网首页
day10 函数变量

day10 函数变量

作者: 暖心人桂 | 来源:发表于2018-09-03 18:42 被阅读0次

    1.函数作为变量
    在python中,函数就是一种特殊的类型。声明函数的时候,其实就是在声明类型是function的变量。(变量能做的,函数都可以做)

    1.给变量赋值

    def func1():
        print('abc')
        
    a = func1
    a()
    func1()
    '''
    abc
    abc
    '''
    

    2.函数作为列表的元素(可以把函数存放到列表中)

    a = []
    for x in range(3):
        def fun1():
            print('abc')
        a.append(fun1)
    
    print(a)
    a[0]()
    '''
    [<function fun1 at 0x008DB8A0>, <function fun1 at 0x008DB2B8>, <function fun1 at 0x008DB8E8>]
    
    abc
    '''
    

    3.函数作为函数的参数(回调函数)

    def fun1():
        print('a')
    
    def fun2():
        print('b')
    
    
    def  mai_fun(n):
        n()
    
    mai_fun(fun2)
    '''
    b
    '''
    

    4.函数作为函数的返回值

    def fun(str1):
        if str1 == '+':
            def sum2(*n):
                sum1 = 0
                for num in n:
                    sum1 += num
                return sum1
            return sum2
    print(fun('+')(1,2,3))
    '''
    6
    

    2.生成器和生成式
    1.可以把迭代器看成一种容器,类似列表。生成器就是来生成迭代器。

    2.生成式--------产生一个迭代器的表达式
    a = (x for x in range(10))
    print(next(a))
    print(next(a))
    结果:0,1
    '''
    1.a是生成器,能够生成0-9中的所有的数字。
    2.生成器和迭代器都是通过next来获取里面的数据
    '''
    2.b = (char for x in 'waqsw' if  x =='wa')
    '''
    后面可以加判断条件。
    '''
    
    3.list1 = [x for x in range(10)]
    '''
    通过将生成式产生的迭代器转换成了一个列表
    '''
    

    4.将生成器转换成字典(容器类型的元素是元组,并且元素中有且只有两个元素,才能转换成字典)

    dict1 = [(x,x+1) for x in range(10)]
    print(dict1)
    dict2 = dict(dict1)
    print(dict2)
    '''
    [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9), (9, 10)]
    {0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}
    '''
    

    练习,key,value互换。

    dict2 = {'a':1,'b':2}
    dict3 = dict(((dict2[x],x) for x in dict2))
    dict1 = dict(((v,k) for k,v in {'a':1,'b':2}.items()))
    
    print(dict1)
    print(dict3)
    '''
    {1: 'a', 2: 'b'}
    {1: 'a', 2: 'b'}
    '''
    

    3.yield

    1.只要函数中有yield关键字,那么这个函数就会变成一个生成器。(只要有yield不管有没有执行到yield,函数的调用结果都是生成器)
    2.有yield的函数,在调用函数的时候不再是获取返回值,而是产生一个生成器对象,生成器对象中保留的是函数体。
    3.当通过next获取生成器中的数据的时候,才会去执行函数体,执行到yield为止,并且将yield后面的结果作为生成的数据返回。同时记录结束的位置,下次再调用next的时候,从上次结束的位置接着往后执行。
    '''
    def fun1():
        yield 1
        yield 1
    
        x = y = 1
        while True:
            yield x+y
            x,y = y,x+y
    
    gen = fun1()
    for _ in range(10):
        print(next(gen),end=' ')
    '''斐波拉切数列
    1 1 2 3 5 8 13 21 34 55 
    

    4.生成器和生成式产生的对象就是迭代器。

    iter1 = iter([1,2,3,4,5])
    print(next(iter1))
    
    for item in iter1:
        print(item,end=' ')
    '''
    1
    2 3 4 5 
    '''
    将列表转换成迭代对象
    

    5.文件操作
    1.程序中不管操作任何文件,不管怎么操作,过程都是:打开文件-->操作(读/写)--->关闭文件
    2.做数据持久化,本地化,都要使用文件来保存数据(数据库文件,txt文档,json文件,plist,xml文件等,二进制文件(图片,视频,音频等))

    a.文本文件的操作
    
    1.打开文件
    open(文件地址,打开方式,encoding=编码方式)
    '''
    a.文件地址:文件所在的地址(路径)。绝对路径和相对路径。
    
    b.打开方式:
    'r' ------ > 读(默认值),以文本的形式返回(str)
    'rb'------> 读,读出来的内容以二进制(bytes)的形式返回。
    
    'w' ------> 写,写文本到文件中(先抹除文本的原内容在写入,如果文件不存在,会自动创建)
    'wb'------>写,写二进制数据到文件中
    'a' -------->写(追加),在原有的内容后面写。
    
    c.编码方式:以文本的形式读和写的时候才需要设置编码方式。utf -8(万国码)
    
    

    2.操作文件

    open函数的返回值是被打开的文件对象
    f1 = open(r'C:/Users/Administrator/Desktop/1.txt','r')
    f2 = open(r'C:/Users/Administrator/Desktop/1.txt','w')
    一.读
    '''
    f1.read()  # 读所有内容,将结果返回。
    f1.readline()  # 一行一行的读
    注意:当打开这个文件,没关闭之前。假如读一行,下次再读就从第二行开始。
    '''
    二.写
    '''
    f2.write()  # 'w' 抹除之前的内容,然后写。如果想不抹除就用 'a'
    
    '''
    1.当以读的形式打开文件的时候,如果文件不存在,程序会报错。
    2.当以写的形式写文件的时候,如果文件不存在,文件会被创建。
    
    

    相关文章

      网友评论

          本文标题:day10 函数变量

          本文链接:https://www.haomeiwen.com/subject/jxdswftx.html