python note 14 其他函数及递归应用
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 其他函数及递归应用的更多相关文章
- Python基础之内置函数和递归
一.内置函数 下面简单介绍几个: 1.abs() 求绝对值 2.all() 如果 iterable 的所有元素都为真(或者如果可迭代为空),则返回 True 3.any() 如果 iterable 的 ...
- python基础-协程函数、递归、模块、包等内容
1. 协程函数 1.1 yield基本用法 yield作用 1.把函数的执行结果封装好,即封装__iter__和__next__,即得到一个迭代器 2.与return功能类似,都可以返回值,但不同的是 ...
- python之协程函数、递归、二分法
一.协程函数: 协程函数的语法: def eater(name): print('%s说:我开动啦' %name) food_list=[] while True: food=yield food_l ...
- python基础10 ---匿名函数和递归
一.匿名函数 1.lambda表达式就相当于匿名函数,其格式为: lambda 参数列表:参数表达式 2.lambda自带return值,因为匿名函数有个限制,就是只能有一个表达式,不用写return ...
- 零基础入门学习Python(22)--函数:递归是神马
知识点 递归是神马? 递归是属于算法的范畴. 递归就是函数调用自身的一种行为. >>> def g(): return g() >>> g() Traceback ...
- python note 09 初识函数
1.函数 def my_len(): #自定义函数(相当于len) i = 0 for k in s: i += 1 print(i) print(my_len()) #输出None,因为没有返回值 ...
- Day3 - Python基础3 函数、递归、内置函数
Python之路,Day3 - Python基础3 本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8. ...
- Python之旅Day3 文件操作 函数(递归|匿名|嵌套|高阶)函数式编程 内置方法
知识回顾 常见五大数据类型分类小结:数字.字符串.列表.元组.字典 按存值个数区分:容器类型(列表.字典.元组) 标量原子(数字.字符串) 按是否可变区分:可变(列表.字典) 不可变(数字.字符串.元 ...
- Python基础(协程函数、内置函数、递归、模块和包)-day05
写在前面 上课第五天,打卡: 凭着爱,再回首: 一.协程函数(生成器:yield的表达式形式) 1.yield 的语句形式: yield 1 - 这种方式在 Python基础(函数部分)-day04 ...
随机推荐
- 填坑:Java 中的日期转换
我们之前讨论过时间,在Java 中有一些方法会出现横线?比如Date 过期方法. 参考文章:知识点:java一些方法会有横线?以Date 过期方法为例 Java中的日期和时间处理方法 Date类(官方 ...
- SQL对于 小数处理的小结
DECLARE @digital INT --截断小数位 ,,)),@digital) AS 截断小数位 --上抛小数位 ,,)),@digital) AS 上抛小数位 SELECT CEILING ...
- Unity暂停游戏功能
关于暂停游戏功能的做法,网上的教程以及Unity官方发布的Demo都是通过把Time.timeScale设成0来实现的,然而这会导致一些蛋疼的问题,因为Time.timeScale是全局变量,改成0后 ...
- 安装部署Kafka集群
kafka是一个开源的分布式消息订阅系统(消息中间件) 安装过程 1.下载kafka_2.11-0.10.1.0.gz(ps:千万不要下错了,博主就是下到了src文件上去了,kafka中的zookee ...
- 【转录组入门】3:了解fastq测序数据
操作:需要用安装好的sratoolkit把sra文件转换为fastq格式的测序文件,并且用fastqc软件测试测序文件的质量 作业:理解测序reads,GC含量,质量值,接头,index,fastqc ...
- Pathon学习笔记1
1.解释型语言和编译型语言 编译型:需要一个翻译的程序——编译器(Compiler)对源代码进行转化,变成可执行代码,称为编译(Compile).大的复杂的程序还需要链接程序(Linker)来链接各个 ...
- postgis创建空间数据库,导入shp数据
使用向数据库中导入数据
- NodeJS-静态服务器
静态服务器 代码 const http = require('http') const chalk = require('chalk') const conf = require('./config/ ...
- redis权限认证及登录
找到配置文件 redis.conf 找到 requirepass 字段 去掉注释,改为 requirepass yourpassword 重启redis: service redis rest ...
- Oracle常见错误:ORA-06550、ORA-00911、ORA-02085
ORA-06550:检查标点符号,如果是在写存储过程时候,切记每行每条语句都应该以“;”结束 ORA-00911: invalid character 包含中文报错 ORA-02085:数据库连接 X ...