美文网首页
Day10 函数3

Day10 函数3

作者: 巫岷俊 | 来源:发表于2018-09-11 20:14 被阅读0次

    1 函数作为变量的使用

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

    1.函数给其他变量赋值
    具体操作如下代码所示:

    # 声明一个函数func1(声明了一个函数变量func1,func1就是一个变量)
    def func1():
        print('hello python')
    
    c = func1    # 将func1赋值给c,这里的func1不加括号
    # 这样变量c也成为了函数变量,可以通过c()进行函数调用
    c()
    输出结果为:
    
    hello python
    

    1.2 函数作为列表的元素
    具体操作如下代码所示:

    list1 = [a, '10', 100]
    list2 = []
    list3 = []
    
    for x in range(10):
        def func2(y):
            print(x+y)
        list2.append(func2)
        list3.append(func2(x))
    
    # list2中每个元素值都是函数
    print(list2)
    print(list3)
    
    # list2[0]就是一个函数
    func = list2[0]
    print(func(100))
    
    # 调用list2中下标是1对应的函数,并传参为10
    x = 10
    list2[1](10)
    

    直接将函数作为列表的元素

    funcs = [func1]
    funcs0
    1.3 将函数作为字典的值
    具体操作如下代码所示:

    # 写一个求差函数如:sub(10,2,3) --> 10-2-3
        def sub(*nums):
            """
            累计求差
            :param nums: 求差的数
            :return: 差
            """
            if not nums:
                return 0
            # 默认是第一个数
            sum1 = nums[0]
            for item in nums[1:]:
                sum1 -= item
            return sum1
    # sub函数作为值出现在字典中
    operation = {'+': lambda *nums: sum(nums), '-': sub, '*': lambda x, y: x*y}
    result = operation['-'](10, 20, 30, -100)
    print(result)
    输出结果为
    
    60
    

    1.4 函数作为函数的参数(回调函数)
    具体操作如下代码所示:

    # 定义一个清洁地板函数
    def clean_floor(time):
        print('在%s,做地板清洁服务' % time)
        print('收费100元')
        return 100
    # 定义一个打扫厨房函数
    def clean_kitchen(time):
        print('在%s,打扫厨房' % time)
        print('收费200元')
        return 200
    
    # 在指定的时间叫指定的服务,通过函数调用函数
    def call_service(time:str, service):
        service(time)
    
    call_service('上午10点', clean_kitchen)
    输出结果为
    
    在上午10点,打扫厨房
    收费200元
    

    1.5 函数作为函数的返回值

    具体操作如下代码所示:

    def my_operation(operator:str):
        if operator == '+':
            def my_sum(*nums):
                sum1 = 0
                for num in nums:
                    sum1 += num
                print(sum1)
            return my_sum
        elif operator == '*':
            def my_sum(*nums):
                sum1 = 1
                for num in nums:
                    sum1 *= num
                print(sum1)
            return my_sum
    
    my_operation('+')(1, 2, 3)
    输出结果为
    
    6
    

    2 生成式和迭代器

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

    1.生成式----产生一个迭代器的表达式
    例如:

    # a是生成器,能够生成0-9中的所有数字
    a = (x for x in range(10))
    
    # 其它写法
    b = (char for char in 'hello world')
    
    c = (char1 for char1 in 'h02el4lo p5y4t1h24o845n' if '0'<=char1<=9)
    

    2.生成器和迭代器都是通过next来获取里面的数据
    例如:

    a = (x for x in range(10))
    print(next(a))  # 通过next每次只会返回一个值
    
    # 通过循环可以将生成器中的数字都打印出来
    for x in a:
        print(x)
    输出结果为
    
    0123456789`
    

    3.将生成器转换成列表
    注意:容器类型的元素是元组,并且元素中有且只有两个元素,才能转换成字典。

    list1 = [x for x in range(10)]
    print(list1)
    
    输出结果为
    >`[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]`
    
    

    3.生成器

    只要函数中有yield关键字,那么这个函数就会变成一个生成器。

    a.有yield的函数,在调用函数的时候不再是获取返回值,而是产生一个生成器对象,生成器对象中保留的是函数体。
    b.当通过next获取生成器中的数据的时候,才会去执行函数体,执行到yield为止,并且将yield后面的结果作为生产的数据返回,同时记录结束的位置,下次再调用next的时候,从上次结束的位置接着往后执行。
    例如:

    # 注意:只要函数中有yield,不管yield会不会执行到,函数的调用结果都是生成器
    def func3(x):
        print('abc')
        if x > 10:
            yield 100
            print('aaa')
    
    gen2 = func3(11)
    print(next(gen2))
    输出结果为
    
    abc
    100
    

    4 文件操作

    1.打开文件
    格式为:open(文件地址,打开方式,encoding = '编码方式')
    a.文件地址:告诉open函数要打开的是哪个文件,填文件路径。
     1.可以填绝对路径
      绝对路径:如:'E:/aa.txt'(一般不用)
     2.可以填相对路径
      相对路径:./相对路径(相对于当前文件所在的目录)
           ../相对路径(相对于当前文件所在的目录的上一层目录)
    b.打开方式
    方法 描述
    'r' 读(默认值),读出来的内容以文本的形式返回
    'rb'/'br' 读,读出来的内容以二进制的形式返回
    'w' 写,写文本到文件中,会覆盖原文档
    'wb/bw' 写,写二进制数据到文件中
    'a' 写,在原文档后追加写
    c.编码方式:以文本的形式读和写的时候才需要设置编码方式。
    utf-8:万国码
    gbk:只支持中文

    d.open函数的返回值是被打开的文件对象。

    例如,打开一个E盘路径下的aa.txt文件和打开一个当前目录下的test.txt文件:

    f = open('E:/aa.txt', 'r', encoding='utf-8')
    
    f1 = open('./test.txt', 'r', encoding='utf-8')
    
    • 关闭文件
      格式为:文件对象.close()
    • 操作文件
      文件的操作主要为文件的读写。当以读的形式打开文件的时候,如果文件不存在,程序会崩溃,报:FileNotFoundError;当以写的形式打开一个不存在的文件的时候,会自动创建一个新的文件。
      具体操作如下代码所示:
    # a.读文件
    # 打开文件,f1就是被打开的文件对象
    f1 = open('./test.txt', 'r', encoding='utf-8')
    # 获取文件中的所有的内容,将结果返回给content保存
    content = f1.read()
    print(content)
    f1.close()
    print('=============')
    
    f2 = open('./test.txt', 'r', encoding='utf-8')
    # 从文件开始读到第一行结束
    content2 = f2.readline()
    print(content2)
    # 从第二行开始,读到第二行结束
    print(f2.readline())
    # 从第三行开始,读到文件结束
    print(f2.read())
    f2.close()
    print('****************************')
    # 练习:读文件中的内容,一行一行的读,读完为止
    f3 = open('./test.txt', 'r', encoding='utf-8')
    t = f3.readline()
    while t:
        print(t)
        t = f3.readline()
    
    f3.close()
    # 写操作
    'w' ---> 写操作,完全覆盖原文件的内容
    'a' ---> 写操作,在原文件的内容后面去追加新的内容
    """
    f4 = open('./test1.txt', 'w', encoding='utf-8')
    f4.write('程序员的诗')
    f4.close()
    
    f5 = open('./test.txt', 'a', encoding='utf-8')
    f5.write('程序员的诗')
    f5.close()
    

    相关文章

      网友评论

          本文标题:Day10 函数3

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