一 函数类型
类型 | 高阶函数 | 闭包函数 | 递归函数 | 内置函数 |
定义 | python解释器提供了一些常用的内置函数给开发者在python任意一个位置使用 | |||
声明 |
# 普通函数 # 高阶函数 ret = calc(10,20,add) |
def foo(): func = foo() 闭包函数声明和执行过程中,外函数作用域下的局部变量不会因为闭包函数执行结束而被内存回收删除,而是与内部函数进行引用绑定,导致该变量会继续保留在内存中,并且闭包函数还可以在其定义环境外被执行,并保持与该变量的关系。 |
# 方式1: # 方式2,也叫尾递归: 尾递归的运行速度和消耗性能比普通递归要好,但是CPython不支持尾递归 |
包含基础函数和高阶函数 |
属性 |
# __closure__ 获取闭包函数使用过的外函数作用域下的局部变量,如果值是None则表示当前函数不是闭包 func = foo() |
|||
特点/应用 |
# 应用:计算某个函数运行耗时 一个高阶函数应该具备下面至少一个特点:
|
# # 应用:计算一个函数被使用了次数 |
||
意义 |
1. 闭包可以优先使用外函数中的变量,并对闭包中的值起到了封装保护的作用,外部无法访问。 |
附:1 内置函数的基础函数
函数 | 描述 | 实例 |
判断可迭代参数 iterable 中的所有元素是否都为 True,如果是返回 True,否则返回 False。除了是 0、空、None、False 外都算 True。 |
# data = [1, 2, 3, 4] |
|
# b0 = b'abc' # # bytes字节流也是序列类型,也可以被for循环遍历 |
||
将参数source转换成bytes字节流列表,是一个可变序列。 |
# ba0 = bytearray(b'abc') |
|
返回当前整数对应的 ASCII 字符。 |
# print( chr(97)) # a |
|
返回当前ASCII字符对应的整数。 |
# print( ord("a") ) # 97 |
|
python提供的一个内置代码解释器,可以执行储存在字符串或文件中的多行Python语句,有一定的安全性问题。 |
str2 = """ # [1, 2, 34] |
|
将一个字符串编译为字节代码。一般都是compile配合exec使用。 |
exec 执行的字符串代码大多数来自文件、网络、第三方软件(数据库) # str1 = """ # 扩展:传入数据到exec解释器 |
|
收集当前作用域范围内的信息(变量,函数等) |
# dir 列表一个对象的成员信息 # python中的对象非常多。所以如果要了解一个对象给我们提供了什么操作(有什么函数?) # str1 = "hello" |
|
enumerate | 将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,常用于 for 循环中。 |
# set_data = {"A", "C", "D"} |
reversed | 反转序列,可以把字符串、列表、元组等序列进行反转排列顺序。 |
区别于reverse方法 # str1 = "hello world" |
zip | 将可迭代的对象作为参数,将对象中对应的元素压缩成一个个元组,然后返回由这些元组组成的列表。加*号则表示解压。 |
""" # 解压还原 |
locals | 获取当前作用域的所有标记符(变量,函数,类等...) |
"""应用1:把函数内部所有变量全部导出外界""" |
globals | 获取全局作用域的所有标记符(变量,函数,类等...) |
"""应用2:批量声明变量"""(少用) |
eval(expression[, globals[, locals]]) | python提供的一个内置代码解释器,可以执行储存在字符串中的Python表达式字符串,功能没有exec强大,也有一定的安全性问题 |
# content = input("请输入你要执行的表达式代码:") 请输入你要执行的表达式代码:1+2 |
complex([real[, imag]]) | 转化一个字符串或数为复数。复数是python中数值类型之一 |
# 复数的运算:实部和实部计算,虚部和虚部计算。 # print(num1) # (3-2j) |
frozenset |
返回一个冻结的集合,冻结后集合不能再添加或删除任何元素 #与元组区别:无序的 |
|
hash | 获取取一个对象(字符串或者数值等)的哈希值。 |
# 在python,数据类型分可变和不可变类型 # data1 = 1 |
注:
1 bytes字节流与bytearray字节数组,属于二进制的字节数据。string字符串与bytes字节流的区别: 1. 字符串是字符组成的有序的不可变序列 2. bytes是字节组成的有序的不可变序列 3. bytearray是有序的字节组成的可变序列 # bytes字节流属于不可变类型,与字符串的操作一样,只是一个bytes字节流,一个是字符串而已。 # bytearray字节数组属于可变类型,与列表的操作类似,字节数组不仅支持append, insert等序列操作,还支持字符串操作,可以理解为列表和字符串的组合 # s1 = "abc" # ret = s1.replace("b", "w") # print(ret) # awc # print(s1) # abc 替换的不是原来的字符串,而是基于替换操作产生一个新的字符串序列 #b5 = bytearray(b'bcd') #print(ord("e")) # 101 #b5.append(ord("e")) #print(b5) # bytearray(b'bcde')
2 滑动序列 """ zip在面试中,有时候会被问到一个滑动序列的操作 所谓的滑动序列,指可以根据指定一个任意长度n,对列表进行划分成n个子序列的序列容器。 生活中,开发中需要滑动序列的场景: 1. 班上所有同学组成一个名单,按指定数量n分多个兴趣小组。 2. 有一批学生要坐车到不同的公司企业实习,每一辆的座位有限,可以使用滑动序列可以快速划分每辆车的学生名单 3... """ data = [1, 2, 3, 4, 5, 6, 7, 8, 9] # n = 2 # data = [(1, 2), (3, 4), (5, 6), (7, 8)] #目标 # 根据zip可以实现矩阵效果,列出目标列表数据 # d1 = [1,3,5,7] # d2 = [2,4,6,8] # print( list(zip(d1,d2)) ) # n = 2 # for i in range(n): # print( data[i::n] ) # [1, 3, 5, 7, 9] # [2, 4, 6, 8] # n = 3 # data = [(1, 2, 3), (4, 5, 6), (7, 8, 9)] # d1 = [1,4,7] # d2 = [2,5,8] # d3 = [3,6,9] # print( list( zip(d1,d2,d3) ) ) # 运用 data = [1, 2, 3, 4, 5, 6, 7, 8, 9] def ss(data, n): """滑动序列""" list_data = [] for i in range(n): list_data.append(data[i::n]) return list( zip(*list_data) ) ret = ss(data,2) print(ret) # [(1, 2), (3, 4), (5, 6), (7, 8)] ret = ss(data,3) print(ret) # [(1, 2, 3), (4, 5, 6), (7, 8, 9)] """ list_data = [data1, data2] zip(*list_data) <==等同==> zip(data1, data2) """ 3 输出n位验证码 # # 输出一串大小写字母、数字组成的列表 def content(): data = [] number = list(range(48,48+10)) #1-9 lowercase = list(range(97,97+26)) #a-z uppercase = list(range(65,65+26)) #A-Z for i in number+lowercase+uppercase: data.append(chr(i)) return data import random def random_string(length=6): """ 生成指定长度的随机字符串 :param length: :return: """ ls = content() random.shuffle(ls) return "".join(ls[:length]) code = random_string() print(code)
2 内置函数的高阶函数
函数 | 描述 | 实例 |
filter(function, iterable) | 过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。 |
# data = [1, 2, 3, 4] |
map(function, iterable, ...) | 根据提供的函数对指定序列做映射处理。 |
# data = [99.333, 55, 60, 30.560] |
sorted(iterable, cmp=None, key=None, reverse=False) | 对所有可迭代的对象进行排序操作。 |
""" # # 让字典/列表(二级等长容器)里面的键按字母排列顺序来对成员进行排序 # # sorted还可以针对复杂的数据结构进行排序 |
functools.reduce(function, iterable[, initializer])。 #不常用 注意:在python2中,reduce属于内置函数,直接可以使用,在python3中被官方移至functools模块中了,必须导入functools才能使用。 |
对参数序列中元素进行叠加/累积操作,返回一个最终结果 | """
reduce的使用类似map,但是与map不一样, |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现