本文目录:

一、匿名函数
二、函数递归与二分法
三、面向过程编程

一、匿名函数:

1. 什么是匿名函数

  def定义的是有名函数:特点是可以通过名字重复调用
def func(): #func=函数的内存地址
pass
匿名函数就是没有名字的函数:特点是只能再定义时使用一次

2. 为何要用匿名函数

   强调:
匿名函数的定义就相当于只产生一个变量在值,而没有绑定任何名字,
所以会在定义完之后就被回收,无法重复使用,只能在定义时使用一次
应用:当某一个功能仅使用一次就没有再重复使用的必要了,就应该定义成匿名函数

3. 如何用匿名函数

 lambda x,y:x+y
# print(lambda x,y:x+y)
# res=(lambda x,y:x+y)(1,2)
# print(res) # def sum2(x,y):
# return x + y salaries = {
'egon': 3000,
'alex': 100000000,
'wupeiqi': 10000,
'yuanhao': 2000
} # nums=[10,-1,11,9,23]
# print(max(nums))
# print(max(salaries.values())) # key=函数的内存地址: 作用是控制max函数的比较的值
# def func(k):
# return salaries[k] # print(max(salaries,key=func))
# 1. 将可迭代对象salaries变成迭代器对象iter_obj
# 2. next(iter_obj)得到一个人名,然后将该人名当作参数传给key指定的函数,
# 然后调用函数将函数的返回值当作比较依据
# 3. 比较大小,取出最大值对应的人名
# print(max(salaries,key=lambda k:salaries[k]))
# print(min(salaries,key=lambda k:salaries[k])) # sorted排序
# nums=[10,-1,11,9,23]
# print(sorted(nums))
# print(nums) # salaries={
# 'egon':3000,
# 'alex':100000000,
# 'wupeiqi':10000,
# 'yuanhao':2000
# }
# print(sorted(salaries,key=lambda k:salaries[k]))
# print(sorted(salaries,key=lambda k:salaries[k],reverse=True)) # map
names = ['alex', 'wupeiqi', 'yuanhao', 'kevin', 'hu老师']
# 方式一:手动实现
# new_names=[]
# for name in names:
# new_names.append(name+'dsb')
# print(new_names) # 方式二:列表生成式
new_names = [name + 'dsb' for name in names]
# print(new_names) # 方式三:map+匿名函数
res = map(lambda x: x + 'dsb', names)
# print(res)
# print(list(res)) # reduce
# 方式一:手动实现
# res=0
# for i in range(101):
# res+=i
# print(res) # 方式二:列表生成式
# print(sum([i for i in range(101)])) # 方式三:reduce+匿名函数
from functools import reduce
# print(reduce(lambda x,y:x+y,[i for i in range(101)],100))
# print(reduce(lambda x,y:x+y,[i for i in range(101)]))
# print(reduce(lambda x,y:x+y,['h','e','l','l','o'],'----------')) # filter
names=['alex_dsb','wxx_sb','kevin_sb','hu_sb','egon']
# 方式一:手动实现
new_names=[]
for name in names:
if name.endswith('sb'):
new_names.append(name)
print(new_names) # 方式二:列表生成式
new_names=[name for name in names if name.endswith('sb')]
print(new_names) # 方式三:filter+匿名函数
res=filter(lambda name:name.endswith('sb'),names)
print(res)
print(list(res))

二、函数递归与二分法

递归

1. 什么是函数递归

函数的递归调用是函数嵌套调用的一种特殊形式,
特殊在调用一个函数的过程中又直接或者间接地调用了该函数本身 递归本质就是一个循环的过程,
但是递归必须满足两个原则:
1. 每进入下一层递归,问题的规模必须有所减少
2. 递归必须有一个明确的结束条件或者说有一个明确的进入下一层递归的条件
并且递归有两个明确的阶段
1. 回溯: 一层一层地递归调用下去
2. 递推: 再某一层结束掉递归,然后一层一层返回

2.为何要用递归

在某些情况下,基于递归来使用重复的过程比while循环更加简单

3. 如何用

# def f1():
# print('from f1')
# f1()
# f1() # def f2():
# print('from f2')
# f1()
#
# def f1():
# print('from f1')
# f2()
# f1() # 递归举例:
# age(5)=age(4)+2
# age(4)=age(3)+2
# age(3)=age(2)+2
# age(2)=age(1)+2
# age(1)=18 # age(n)=age(n-1)+2 # n>1
# age(1)=18 # n=1
# def age(n):
# if n == 1:
# return 18
# return age(n-1)+2
#
# res=age(5)
# print(res) # list1=[1,[2,[3,[4,[5,[6,[7,[8,[9,]]]]]]]]]
# def func(l):
# for item in l:
# if type(item) is list:
# # 将item当作一个新列表传给功能本身
# func(item)
# else:
# print(item)
# func(list1)

二分法

二分法是算法的一种,算法是如何高效地解决问题的思路

# nums=[1,13,15,23,27,31,33,57,73,81,93,94,97,101] # 从小到大排列的数字列表
#
# for num in nums:
# if 58 == num:
# print('find it')
# break
# else:
# print('not exists') nums = [1, 13, 15, 23, 27, 31, 33, 57, 73, 81, 93, 94, 97, 101] # 从小到大排列的数字列表
def binary_search(find_num,nums):
print(nums)
if len(nums) == 0:
print('not exists')
return # 功能
mid_index = len(nums) // 2
if find_num > nums[mid_index]:
# in the right
nums=nums[mid_index+1:]
# 重新运行功能,传入新列表
binary_search(find_num,nums)
elif find_num < nums[mid_index]:
# in the left
nums=nums[:mid_index]
# 重新运行功能,传入新列表
binary_search(find_num,nums)
else:
print('find it') # binary_search(97,nums)
binary_search(95,nums)

三、面向过程编程

'''
面向过程编程:
    核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么后干什么...
    基于该思想编写程序脑子里应该始终思考过程二字,就好比在设计一条流水线,是一种
    机械式的思维方式
    优点:复杂的问题的流程化,进而简单化
    缺点:扩展性差
'''

python函数:匿名函数、函数递归与二分法、面向过程编程的更多相关文章

  1. python之旅:迭代器、生成器、面向过程编程

    1.什么是迭代器? 1.什么是迭代器 迭代的工具 什么是迭代? 迭代是一个重复的过程,每一次重复都是基于上一次结果而进行的 # 单纯的重复并不是迭代 while True: print('=====& ...

  2. Python 迭代器-生成器-面向过程编程

    上节课复习:1. 函数的递归调用 在调用一个函数的过程中又直接或者间接地调用了函数本身称之为函数的递归 函数的递归调用有两个明确的阶段: 1. 回溯 一层一层地调用本身 注意: 1.每一次调用问题的规 ...

  3. PYTHON-匿名函数,递归与二分法,面向过程编程

    """匿名函数1 什么是匿名函数 def定义的是有名函数:特点是可以通过名字重复调用 def func(): #func=函数的内存地址 pass 匿名函数就是没有名字的 ...

  4. 匿名函数 python内置方法(max/min/filter/map/sorted/reduce)面向过程编程

    目录 函数进阶三 1. 匿名函数 1. 什么是匿名函数 2. 匿名函数的语法 3. 能和匿名函数联用的一些方法 2. python解释器内置方法 3. 异常处理 面向过程编程 函数进阶三 1. 匿名函 ...

  5. day22 yield的表达式的应用,面向过程编程,内置函数前几个

    Python之路,Day10 = Python基础10 生成器表达式: (i for i in range(10) if i > 5)os.walk(r'文件路径')返回一个迭代器, 第一次ne ...

  6. day14-二分法、匿名函数、内置函数以及面向过程编程

    目录 二分法 匿名函数 内置函数 面向过程编程 二分法 二分法查找适用于数据量较大时,但是数据需要先排好顺序.主要思想是:(设查找的数组区间为array[low, high]) (1)确定该区间的中间 ...

  7. python函数之协程与面向过程编程

    第一:协程 初步了解协程 def eater(): print('start to eat') while True: food=yield print('is eating food:%s'%foo ...

  8. day20 匿名函数,内置函数,面向过程编程

    目录 有名函数 匿名函数 max() min() sorted map filter 内置函数 面向过程编程 有名函数 def f1(): print('my name is f1') f1() my ...

  9. Python函数之面向过程编程

    一.解释 面向过程:核心是过程二字,过程即解决问题的步骤,基于面向过程去设计程序就像是在设计,流水线式的编程思想,在设计程序时,需要把整个流程设计出来, 一条工业流水线,是一种机械式的思维方式 二.优 ...

随机推荐

  1. 在SSH里面远程启动ubuntu上的GUI程序

    由于嵌入式开发板上是ubuntu系统,开发板接有显示器,现有一GUI程序需要在开发板显示器上实时显示,开发板与本地通过网络SSH连接,正常情况执行如:firefox,那么firefox会显示到本地,只 ...

  2. 用事件队列来处理pixi中的场景元素入场

    在pixi中,添加一个精灵元素,你可能需要,先将贴图load进来,然后才能添加到场景中去,所以一般会这么操作 Loader.add("tree","static/imag ...

  3. DevOps - 微服务与Serverless

    微服务 简介 "微服务"强调的是服务的大小,它关注的是某一个点. "微服务架构"则是一种架构思想,需要从整体上对软件系统进行通盘的考虑. 通俗来说,微服务架构就 ...

  4. Jenkins - Tips

    01 - RPM包安装方式 默认路径 配置文件:/etc/sysconfig/jenkins 日志文件:/var/log/jenkins/jenkins.log 执行文件:/usr/lib/jenki ...

  5. Python multiprocess模块(中)

    主要内容: 一. 锁 二. 信号量 三. 事件 通过event来完成红绿灯模型 四. 队列(重点) 队列实现进程间的通信 五. 生产者消费者模型 1. 初始版本(程序会阻塞住) 2. 升级版本一(通过 ...

  6. 资深技术Leader曹乐:如何成为技术大牛

    From: https://mp.weixin.qq.com/s/QaBTm_9AJC01Isr3LLR3aw 原创: 曹乐 公众号: 再成长一次 看了下面这篇文章的话,应该会有收获. 虽然排版不好, ...

  7. K/3 Cloud 中FID和FMasterID的区别

    经常会用到,例如物料在多组织情况下. 例如一个物料分配不同组织后,内码FID肯定是不同的,但FMaterId还是一样的,因为是用一个物料. FMASTERID是和物料编码对应的内码,即一个物料编码对应 ...

  8. 【计算机视觉】【并行计算与CUDA开发】GPU硬解码---DXVA

    前面介绍利用NVIDIA公司提供的CUVID库进行视频硬解码,下面将介绍利用DXVA进行硬解码. 一.DXVA介绍 DXVA是微软公司专门定制的视频加速规范,是一种接口规范.DXVA规范制定硬件加速解 ...

  9. AspxGridView 弹框选择器 JS

    function Dictionary() { this.data = new Array(); this.put = function (key, value) { this.data[key] = ...

  10. [转帖]Linux 下实践 VxLAN:虚拟机和 Docker 场景

    Linux 下实践 VxLAN:虚拟机和 Docker 场景 https://www.cnblogs.com/bakari/p/11264520.html 实践了下 没问题 作者写的很perfect ...