• 8. 递归


    递归

    递归的特点:
    1. 函数内部自己调用自己
    2. 必须要有出口
    

    递归案例

    def sum_numbers(num):
        # 2. 出口
        if num == 1:   #  将 if 则两行注释后则会提示 超出最大出口的错误
            return 1
        # 1. 函数内部自己调用自己
        return num + sum_numbers(num-1)
    
    result = sum_numbers(3)
    print(result)
    
    # 没有出口,则会报错, 错误提示是超出了最大出口
    


    1. lambda 匿名函数 作用: 简化函数代码

    # lambda 匿名函数
    # 1.  不带参数
    test = lambda: 100
    
    print(test) # 输出 test 的内存地址
    
    print(test()) # 输出值
    
    # 2.  带参数
    test = lambda a, b: a + b
    
    print(test) # 输出 test 的内存地址
    
    print(test(2, 3)) # 输出值
    

    2. lambda 参数形式

    # 1. 无参数
    fn1 = lambda: 100
    
    print(fn1())
    
    # 2. 一个参数
    fn2 = lambda a: a
    
    print(fn2('hello world'))
    
    # 3. 默认参数 (缺省参数)
    fn3 = lambda a, b, c=100: a + b + c
    
    print(fn3(10, 20))
    print(fn3(10, 20, 200))
    
    # 4. 可变参数:*args  返回的是 元组
    fn4 = lambda *args: args
    
    print(fn4(10, 20))
    
    # 5. 可变参数:**kwargs 返回的是  字典
    fn5 = lambda **kwargs: kwargs
    
    print(fn5(name='python', age=18))
    
    # 6. 带判断的lambda
    fn6 = lambda a, b: a if a > b else b
    
    print(fn6(1000, 500))
    

    3. abs() 和 round() 和 高阶函数

    # abs(): 求绝对值
    print(abs(-10))
    
    # round(): 四舍五入
    print(round(1.2))
    print(round(1.9))
    
    # 普通函数
    def add_num(a, b):
        return abs(a) + abs(b)
    
    result = add_num(-1, -2)
    print(result)
    
    # 高阶函数
    def sum_num(a, b, f):
        return f(a) + f(b)
    
    result1 = sum_num(1.2, 3.6, round)
    print(result1)
    
    result2 = sum_num(-1, -1, abs)
    print(result2)
    
    # 高阶函数 map()使用
    
    list1 = [1, 2, 3, 4, 5]
    
    def func(x):
        return x ** 2
    
    result = map(func, list1)
    
    print(result) # 返回 内存地址
    
    print(list(result)) # 注意:list表示转化为列表数据  [1, 4, 9, 16, 25]
    
    # 高阶函数 reduce()使用  reduce作用: 将数据累加
    import functools
    
    list2 = [1, 2, 3, 4, 5]
    
    def func2(a, b):
        return a + b
    
    result2 = functools.reduce(func2, list2)
    print(result2) # 15
    
    # 高阶函数 filter()使用  filter作用: 过滤掉不需要的数据, 返回一个新的 filter 对象
    list3 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    
    def func3(x):
        return x % 2 == 0
    
    result3 = filter(func3, list3)
    
    print(result3)
    print(list(result3)) # list 将数据转化为 列表  [2, 4, 6, 8, 10]
    

    4. 文件操作

    # 1. 打开 open()
    f = open('test.txt', 'w')
    
    # 2. 读写操作 write() read()
    f.write('创建一个test.txt新文件zz')
    
    # 3. 关闭 close()
    f.close()
    
    文件访问模式
    
    # r 只读   如果文件不存在,报错  不支持写入操作,表示只读
    
    # w 只写  如果文件不存在,新建文件   执行写入,会覆盖原有内容
    
    # a 追加  如果文件不存在,新建文件  在原有内容基础上,追加新内容
    
    # 访问模式可以省略, 省略后默认为 r 只读
    

    \n 换行  会占用一个字符
    



    # 1. 打开 open()
    f = open('test.txt', 'a+') # a 表示追加 指针在最后
    
    # seek() 改变指针的位置
    f.seek(0, 0) # 或者 f.seek(0)
    
    # 2. 读写操作 write() read()
    con = f.read()
    print(con)
    
    # 3. 关闭 close()
    f.close()
    

    5. python 代码文件备份

    # 1. 需要备份 的文件  sound.txt.mp3
    old_name = input('请输入需要备份的文件名:')
    
    print(old_name)
    
    # 2. rfind 获取 . 的下标 (获取 .的下标)
    index = old_name.rfind('.')
    
    print(index)
    
    # 3. 截取字符串 [开始:结束:步长]
    print(old_name[:index]) # 文件名
    print(old_name[index:]) # 后缀
    
    if index > 0:
        postfix = old_name[index:]
    
    # 4. 将 文件名转化为 文件名 + [备份] +后缀
    new_name = old_name[:index] + '[备份]' + postfix
    
    print(new_name)
    
    # 备份文件
    old_f = open(old_name, 'rb')
    new_f = open(new_name, 'wb')
    
    while True:
        con = old_f.read(1024)
    
        # 判断字符写入是否完毕,结束就终止循环
        if len(con) == 0:
            break
    
        # 将 文件内容写入到 新文件中
        new_f.write(con)
    
    # 关闭文件
    old_f.close()
    new_f.close()
    
  • 相关阅读:
    Rafy 领域实体框架演示(2)
    Rafy 领域实体框架示例(1)
    Corrupt JPEG data: 1 extraneous bytes before marker 0xd9 JPEG datastream contains no image
    Raw image encoder error: Empty JPEG image (DNL not supported)) in throwOnEror
    QByteArray数据进行CRC32校验时产生的随机结果
    socket 发送字符串0x00时被截断
    invalid argument (errno: 22)
    libpng error: IHDR: CRC error
    Cannot find Makefile. Check your build settings.
    QT中常用工具总结
  • 原文地址:https://www.cnblogs.com/wuqxblog/p/15988033.html
Copyright © 2020-2023  润新知