python note 14 其他函数及递归应用

2023-04-12编程技术142120

1、repr用法

print("你好") # 用户看着舒服
print(repr("你好")) # 真实的字符串表示形式(正式的)
print("我叫%r" % "周润发") # %r 实际上调用的是repr()
print(repr("你好, 我\'叫周润发")) # 程序中内部存储的内容, 这个是给程序员看的

2、lambda匿名函数用法

# 普通的正常的函数

def func(n):
return n * n
ret = func(9)
print(ret)

# 匿名函数, 语法: lambda 参数: 返回值

a = lambda n : n * n
ret = a(9)
print(ret)
# print(a(5)) # 函数的名字可以认为是a
# print(func.__name__) # 查看函数的名字
# print(a.__name__) # __name__的值都是<lambda>
def func(a, b):
return a + b
x = lambda a, b: a+b
print(x(1,2))

# 匿名函数, 给函数传递2给参数. 返回最大值

fn = lambda *args: max(args) # 单行函数
print(fn(1,2,5,2,3,4,156,3,2,2,4,5,56,34,34,34,34,88))

3、sorted排序函数用法

lst = ["聊斋", "西游记", "三国演义", "葫芦娃", "水浒传", "年轮", "亮剑"]
def func(s):
return len(s)%2
ll = sorted(lst, key=func)
print(ll)
lst = [
{'name':"汪峰","age":48},
{"name":"章子怡",'age':38},
{"name":"alex","age":39},
{"name":"wusir","age":32},
{"name":"赵一宁","age":28}
]
ll = sorted(lst, key=lambda el: len(el['name']), reverse=True)#倒序排列
print(ll)

4、filter筛选函数用法

lst = ["张无忌", "张铁林", "赵一宁", "石可心","马大帅"]
def func(el):
if el[0] == '张':
return False # 不想要的
else:
return True # 想要的
# 筛选,
f = filter(lambda el: el[0]!="张", lst) # 将lst中的每一项传递给func, 所有返回True的都会保留, 所有返回False都会被过滤掉
print("__iter__" in dir(f)) # 判断是否可以进行迭代
for e in f:
print(e)
lst = [
{"name":"汪峰", "score":48},
{"name":"章子怡", "score":39},
{"name":"赵一宁","score":97},
{"name":"石可心","score":90}
]
f = filter(lambda el: el['score'] < 60 , lst)
print(list(f))

5、map映射函数应用

lst = [1,4,7,2,5,8]
def func(el):
return el**2
m = map(lambda el: el**2, lst) # 把后面的可迭代对象中的每一个元素传递给function, 结果就是function的返回值
print(list(m))

# 分而治之

# map(func1, map(func2, map(func3 , lst)))

# 水桶效应, zip()

lst1 = [1, 3, 5, 7]
lst2 = [2, 4, 6, 8, 10]
m = map(lambda x, y, z: x + y+ z, lst1, lst2, [5,1,2,3,6])
print(list(m))

6、递归函数

# 递归深度. 你可以自己掉用自己的次数,
# 官方文档中递归最大深度是1000. 在这之前就会给你报错

# 遍历 D:/sylar文件夹, 打印出所有的文件和普通文件的文件名

import os
def func(filepath, n): # d:/sylar/
# 1,打开这个文件夹
files = os.listdir(filepath)
# 2. 拿到每一个文件名
for file in files: # 文件名
# 3. 获取到路径
f_d = os.path.join(filepath, file) # d:/sylar/文件名/
# 4. 判断是否是文件夹
if os.path.isdir(f_d):
# 5. 如果是文件夹. 继续再来一遍
print("\t"*n, file,":") # 打印文件名
func(f_d, n + 1)
else: # 不是文件夹. 普通文件
print("\t"*n, file)
func("d:/sylar",0)

7、二分法查找

# 递归来完成二分法

lst = [22, 33, 44, 55, 66, 77, 88, 99, 101 , 238 , 345 , 456 , 567 , 678 , 789]
def func(n, left, right):
if left <= right: # 边界
print("哈哈")
mid = (left + right)//2
if n > lst[mid]:
left = mid + 1
return func(n, left, right) # 递归 递归的入口
elif n < lst[mid]:
right = mid - 1
# 深坑. 函数的返回值返回给调用者
return func(n, left, right) # 递归
elif n == lst[mid]:
print("找到了")
return mid
# return # 通过return返回. 终止递归
else:
print("没有这个数") # 递归的出口
return -1 # 1, 索引+ 2, 什么都不返回, None
# 找66, 左边界:0, 右边界是:len(lst) - 1
ret = func(70, 0, len(lst) - 1)
print(ret) # 不是None

python note 14 其他函数及递归应用的相关教程结束。

本文地址:https://www.ufcn.cn/tutorials/2454140.html

如非特殊说明,本站内容均来自于网友自主分享,概不代表本站观点,如有任何问题我们都将在收到反馈后的第一时间进行处理!