博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python函数:匿名函数、函数递归与二分法、面向过程编程
阅读量:4316 次
发布时间:2019-06-06

本文共 4139 字,大约阅读时间需要 13 分钟。

今天主要讲三大部分内容:

一、匿名函数

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

 

一、匿名函数:

"""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 + ysalaries = {    '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))# mapnames = ['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'],'----------'))# filternames=['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)

 

三、面向过程编程

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

 

 

转载于:https://www.cnblogs.com/wuzhengzheng/p/9768895.html

你可能感兴趣的文章
DB Intro - MySQL and MongoDB
查看>>
Practical Mathematical Handwriting
查看>>
[zz]kvm环境使用libvirt创建虚拟机
查看>>
bzoj1059 [ZJOI2007]矩阵游戏
查看>>
JDK配置步骤
查看>>
springcloud微服务实战--笔记
查看>>
View(视图)——菜单Menu
查看>>
uva 408 Uniform Generator
查看>>
SharePoint 2010 类似人人网站内信功能实施
查看>>
CF 327E(Axis Walking-状态压缩Dp-lowbit的使用)
查看>>
object对象java 利用反射 从数据库取出数据对象list 类似hibernate
查看>>
插入返回ibatis 的selectKey 实现插入数据后获得id
查看>>
vim 程序编辑器
查看>>
LIS(单调队列优化 C++ 版)(施工ing)
查看>>
如何为winform程序打包(图解)
查看>>
如何给行内元素设置宽高?
查看>>
刚接触Vuex
查看>>
四种加载React数据的技术对比(Meteor 转)
查看>>
Airthmetic_Approching
查看>>
操作文本文件
查看>>