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

2024-01-30 14:31:16 浏览数 (1)

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

前言:

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

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

一、算法简介之二分法

1、什么是算法

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

2、算法的应用场景

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

3、二分法

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

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

代码用法:

代码语言:javascript复制
# 设置一段列表
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、简介及用法

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

代码语言:javascript复制
1.常规用法
name = 'kangkang'
if name == 'kangkang':
    print('三好学生')
else:
	print('普通学生')

2.三元表达式用法
name = 'kangkang'
res = '三好学生' if name = 'kangkang' else '普通学生'
print(res)

三、各种生成式

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

1、列表生成式

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

代码语言:javascript复制
# 设置一段列表
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 旧列表]
'''

进阶用法一:

代码语言:javascript复制
new_name_list = [name   'YYDS' for name in name_list if name == 'zhangshan']
print(new_name_list)
-----------------------------------------------------------
['zhangshanYYDS']

'''
原理:
	在基础用法上添加判断,在遍历后方添加条件,通过后进行修改数据值

'''

进阶用法二:

代码语言:javascript复制
new_name_list = ['YYDS' if name == 'zhangshan' else 'DZD' for name in name_list if name != 'wangwu']
print(new_name_list)
-------------------------------------------------------------
['YYDS', 'DZD', 'DZD']
'''
原理:
	将相对于应位置,按条件更换数据值
'''

2、字典生成式

搭配enumerate使用

代码语言:javascript复制
# 字典生成式
str1 = '开开心心'

dict1 = {i: j for i, j in enumerate('开开心心', start= 10)}
print(dict1)
------------------------------------------------------------
{10: '开', 11: '开', 12: '心', 13: '心'}

键值对互换

代码语言:javascript复制
d1 = {'a':'A', 'b':'B', 'c':'C'}
d2 = {v:k for k, v in d1.items()}
print(d2 )
-------------------------------------------------------------
{'A': 'a', 'B': 'b', 'C': 'c'}

3、集合生成式

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

代码语言:javascript复制
# 普通的生成式
{表达式 for 变量 in 旧列表}
# 加条件的生成式
{表达式 for 变量 in 旧列表 if 条件}
# if...else条件的生成式
{表达式 if 条件1 else 条件2for 变量 in 旧列表}

四、匿名函数

1、什么是匿名函数

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

2、匿名函数用法

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

五、常见内置函数

1、map()

代码语言:javascript复制
代码用法:
	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]

2、max()、min()

代码语言:javascript复制
代码用法:
	max(*args, key=None)
    '''
    *args作为可迭代对象,key可为lambd匿名函数,可返回最大值
    '''

3、reduce

代码语言:javascript复制
代码用法:
	 # 插入模块
    from functools import reduce
    reduce(function, sequence, initial=_initial_missing)
    '''
    function可为lambd函数,可为迭代对象进行基础运算
    '''

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

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

模块化的关键点包括:

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

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

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

单元测试的要点包括:

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

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

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

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

结尾:

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

0 人点赞