• 【Python基础之函数:二分法、三元表达式、生成/推导式、匿名函数、内置函数】


    🤵‍♂️ 个人主页@老虎也淘气 个人主页
    ✍🏻作者简介:Python学习
    🐋 希望大家多多支持我们一起进步!😄
    如果文章对你有帮助的话,
    欢迎评论 💬点赞👍🏻 收藏 📂加关注

    前言:

    在广袤的Python编程领域中,掌握基础的函数概念是每位程序员的必修课。函数不仅仅是代码组织的方式,更是实现复杂逻辑、提高代码重用性的关键。本篇技术博客将深入探讨Python基础之函数的多个方面,从二分法、三元表达式、生成/推导式,到匿名函数和内置函数,我们将一一解析这些核心概念,带您逐步深入了解Python函数的强大之处。

    无论您是初学者还是有经验的开发者,这篇文章都将为您提供全面而深入的见解,助您更好地利用这些功能丰富的函数特性,使您的Python编程技能更上一层楼。

    一、算法简介之二分法

    1、什么是算法

    算法是指数学运算,在python中算法是指数学运算和代码相结合,能够高效的解决一些问题

    2、算法的应用场景

    算法的应用场景非常广阔,在我们日常中的网购、抖音、拍照识别都是通过算法完成

    3、二分法

    什么是二分法:二分法是一直最基础的算法,通过将数据分割、比对来提高工作效率

    缺陷:针对开头或结尾的数据,查找效率很低

    代码用法:

    # 设置一段列表
    list_1 = [11, 22, 33, 44, 55, 66, 77, 88, 99, 101, 202, 303, 404, 505, 606, 707, 808, 909]
    # 定义想要查找的数据指
    target_num = 505
    
    
    # 6、使用递归函数循环重复查找
    def func(list_1, target_num):
        # 7、添加结束条件
        if len(list_1) == 0:
            print('这里没有你要的值')
        # 1、获取列表中间索引值
        middle_index = len(list_1) // 2
        # 2、比较目标数据值与列表中间数据值
        if target_num > list_1[middle_index]:
            # 3、切片保留列表右边
            r_list_1 = list_1[middle_index + 1:]
            # 针对目标值右边继续循环
            return func(r_list_1, target_num)
        # 4、继续比较目标数据值
        elif target_num < list_1[middle_index]:
            # 5、保留列表左侧
            l_list_1 = list_1[:middle_index]
            # 针对目标值左边边继续循环
            return func(l_list_1, target_num)
        # 5、当以上条件都不成立则说明目标数据中等于索引值
        elif middle_index == len(list_1) // 2:
            print(f'找到了{target_num}')
    
    func(list_1, 505
         )
    --------------------------------------------------------------
    找到了 505
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    二、三元表达式

    1、简介及用法

    三元表达式是指,当结果是二选一的情况下我们可以做到优化代码使代码简写,当有多个条件和嵌套时不推荐使用
    代码用法:

    1.常规用法
    name = 'kangkang'
    if name == 'kangkang':
        print('三好学生')
    elseprint('普通学生')
    
    2.三元表达式用法
    name = 'kangkang'
    res = '三好学生' if name = 'kangkang' else '普通学生'
    print(res)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    三、各种生成式

    ​ 可以更加方便、快捷的对列表、字典、集合内数据值进行修改

    1、列表生成式

    可搭配for 、if 、range()等多种内置方法快速便捷生成需要的列表

    # 设置一段列表
    name_list = ['zhangshan', 'lisi', 'wangwu', 'zhangermazi']
    # 条件:给上方列表内所有数据加上'YYDS'
    
    # 1、常规方式 for循环
    new_name_list = []
    for name in name_list:
        new_name_list.append(name + 'YYDS')
    print(new_name_list)
    -------------------------------------------------------------
    ['zhangshanYYDS', 'lisiYYDS', 'wangwuYYDS', 'zhangermaziYYDS']
    
    
    
    # 2、列表生成式用法
    new_name_list = [name + 'YYDS' for name in name_list]
    print(new_name_list)
    ------------------------------------------------------------
    ['zhangshanYYDS', 'lisiYYDS', 'wangwuYYDS', 'zhangermaziYYDS']
    
    '''
    原理:	
        # 普通的生成式
        [表达式 for 变量 in 旧列表]
        # 加条件的生成式
        [表达式 for 变量 in 旧列表 if 条件]
        # if...else条件的生成式
        [表达式 if 条件1 else 条件2for 变量 in 旧列表]
    '''
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    进阶用法一:

    new_name_list = [name + 'YYDS' for name in name_list if name == 'zhangshan']
    print(new_name_list)
    -----------------------------------------------------------
    ['zhangshanYYDS']
    
    '''
    原理:
    	在基础用法上添加判断,在遍历后方添加条件,通过后进行修改数据值
    
    '''
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    进阶用法二:

    new_name_list = ['YYDS' if name == 'zhangshan' else 'DZD' for name in name_list if name != 'wangwu']
    print(new_name_list)
    -------------------------------------------------------------
    ['YYDS', 'DZD', 'DZD']
    '''
    原理:
    	将相对于应位置,按条件更换数据值
    '''
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2、字典生成式

    搭配enumerate使用

    # 字典生成式
    str1 = '开开心心'
    
    dict1 = {i: j for i, j in enumerate('开开心心', start= 10)}
    print(dict1)
    ------------------------------------------------------------
    {10: '开', 11: '开', 12: '心', 13: '心'}
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    键值对互换

    d1 = {'a':'A', 'b':'B', 'c':'C'}
    d2 = {v:k for k, v in d1.items()}
    print(d2 )
    -------------------------------------------------------------
    {'A': 'a', 'B': 'b', 'C': 'c'}
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3、集合生成式

    代码用法:#与列表生成式基本相同

    # 普通的生成式
    {表达式 for 变量 in 旧列表}
    # 加条件的生成式
    {表达式 for 变量 in 旧列表 if 条件}
    # if...else条件的生成式
    {表达式 if 条件1 else 条件2for 变量 in 旧列表}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    四、匿名函数

    1、什么是匿名函数

    匿名函数是指没有函数名的函数,通常搭配在函数内或条件使用

    2、匿名函数用法

    关键字lambda
    语法结构
    lambda 形参:返回值
    使用场景
    lambda a,b:a+b
    匿名函数一般不单独使用 需要配合其他函数一起用

    五、常见内置函数

    1、map()

    代码用法:
    	map(func,iterable)
    	'''
    	func为函数名,可为lambda匿名函数,iterable为可迭代对象
       此函数会将可迭代对象中的每一位元素作为参数传递到func中,并将func的计算结果加入到新列表内,map()返回的是一个包含所有结果的新列表。
    	'''
        l1 = [1, 2, 3, 4, 5]
        def func(a):
             return a + 1
        res = map(lambda x:x+1, l1)
        print(list(res))
    --------------------------------------------------------------
     [2, 3, 4, 5, 6]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    2、max()、min()

    代码用法:
    	max(*args, key=None)
        '''
        *args作为可迭代对象,key可为lambd匿名函数,可返回最大值
        '''
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3、reduce

    代码用法:
    	 # 插入模块
        from functools import reduce
        reduce(function, sequence, initial=_initial_missing)
        '''
        function可为lambd函数,可为迭代对象进行基础运算
        '''
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    函数的模块化和单元测试:

    在软件开发中,将代码划分成小的、独立的模块是一种良好的实践。对于函数来说,模块化意味着将功能划分为小的可重用单元,每个单元都专注于解决特定的问题。这样的设计使得代码更易读、更易维护,并促进了团队协作。

    模块化的关键点包括:

    单一职责原则: 每个函数应该专注于执行一个特定的任务。这种分割不仅使得代码更易于理解,还使得修改和更新变得更加简单。

    接口设计: 确保函数之间的交互通过清晰的接口进行,这有助于隔离模块并降低耦合度。好的接口设计使得模块可以独立开发、测试和维护。

    一旦代码被模块化,下一步就是确保这些模块是正确的。这时,单元测试发挥了关键作用。

    单元测试的要点包括:

    测试用例设计: 编写用于验证函数是否按照预期工作的测试用例。这包括正常输入、边界条件和异常情况的测试。

    自动化测试: 借助测试框架(例如unittest、pytest等),确保测试可以轻松地运行,以便在代码发生变化时及时检测到问题。

    集成持续集成: 将单元测试集成到持续集成工具中,确保每次代码更改都会触发测试。这有助于快速发现和修复潜在问题。

    通过模块化和单元测试,您可以更自信地构建和维护函数,确保它们在整个应用程序中协同工作。这也为团队合作提供了更好的基础,因为每个人都可以专注于自己负责的模块,而不必担心整个代码库的复杂性。

    结尾:

    在技术的海洋中,掌握Python基础之函数,就如同拥有了一把打开编程新境界的金钥匙。通过学习二分法的精妙运用,理解三元表达式的简洁之美,驾驭生成/推导式的高效实用,熟练运用匿名函数的灵活性,以及掌握内置函数的强大功能,您将能够以更加优雅和高效的方式编写Python代码。

  • 相关阅读:
    dpdk hw-offload flows i
    计算机毕业设计(附源码)python在线药物配送系统
    吃透这份高并发/调优/分布式等350道面试宝典,已涨30k
    【leetocde】128. 最长连续序列
    查找算法【平衡二叉树】 - 简介
    JavaScript 基础第三天笔记
    Java:搞清楚这三类Java面试问题,offer就稳了
    R语言绘制时间序列的偏自相关函数图:使用pacf函数可视化时间序列数据的偏自相关系数图、分析是否存在自相关性以及显著相关的个数
    Design Compiler工具学习笔记(5)
    微前端学习
  • 原文地址:https://blog.csdn.net/m0_66106755/article/details/127811108