第六章 函数[DDT书本学习 小甲鱼]【3】

6.5 lambda表达式 谐音:懒不嗒?lam-b-da 匿名函数
代码
def my(x):
teturn 2*x+1
e=my(5)
print(e)
---------------------
11
如果使用lambda语句来定义,会是这样
lambda x:2*x+1 返回的是一个函数对象
进行使用,代码如下
g=lambda x:2*x+1
print(g(5))
------------------------
11
=========================================================
练习修改普通函数为匿名函数
def add(x,y):
return x+y
print(add(3,4))
------------ 修改后 -----------
g=lambda x,y:x+y
print(g(3,4))
总结,lambda函数的作用
1)写一些执行脚本时候,省下定义过程,可以使得代码更加精简。
2)程序执行只需要调用少数次,起名头疼,可以不必考虑命名问题。
3)简化代码可读性。

介绍两个BIF filter()和map()
1.filter() 俗称过滤器 2个参数,前面为None或者函数,后面为迭代数据,将
后面的每个元素作为函数的参数进行计算,把返回为True的值筛选出来。
代码如下
temp=filter(None,[1,0,True,False])
print(list(temp))
-------------运行结果-------------
[1,True]
利用这个BIF,尝试写一个筛选奇数的过滤器
def fun(x):
return x%2
temp=filter(fun,range(10))
print(temp)
-----------------------------------
[1,3,5,7,9]
===============================================
学习了lambda后,可以简化为一行
print(list(filter(lambda x:x%2,range(10))))

2.map() 不是地图的意思,映射。将每个元素进行处理。
print(list(maplambda x:x*2,range(10))))
-------------------------------------------
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

6.6递归
6.6.1递归是什么?从原理上来讲就是函数调用自身的这么一个行为。
代码例子
def fun():
fun()
fun()
可以无限循环下去,Python处于善意保护,限制了1000层。
设置递归深度的限制方法如下
import sys
sys.setrecursionlimit(100000)
6.6.2写一个求阶乘的函数
def jc(x):
k=x
for i in range(1,x):
k*=i
return k
e=int(input("请输入一个整数:"))
d=jc(e)
print("【%d】的阶乘结果是:【%d】"%(e,d))
-------------------------------------------------
请输入一个整数:5
【5】的阶乘结果是:【120】
普通的函数实现,大家都会,再来看看递归版本的代码
def myfun(n):
if n==1:
return 1
else:
return n*myfun(n-1)
------------以上是递归写法-------------------
e=int(input("请输入一个整数:"))
d=myfun(e)
print("【%d】的阶乘结果是:【%d】"%(e,d))
================================================
递归的条件 1.调用函数本身 2.设置了正确的返回条件
6.6.3 这帮兔崽子 斐波那契数列Fibonacci
月数1 2 3 4 5 6 7 8 9
对数1 1 2 3 5 8 13 21 34
---------------------------------------------------
数学函数定义为 n=1时 f(n)=1
n=2时 f(n)=1
n>2时 f(n)=f(n-1)+f(n-2)
题目:20个月后,共有多少对兔子?
==========================================
迭代实现代码如下
def tuzi(n):
a1=1
a2=1
a3=1
if n<1:
print("输入有误!")
return -1
while n>2:
a3=a1+a2
a1=a2
a2=a3
n-=1
return a3
b=tuzi(20)
if b!=-1:
print("20个月后一共有%d对兔子"%b)
----------------------------------------
20个月后一共有6765对兔子
=======================================================
递归实现代码如下
def tu(n):
if n<1:
print("你的输入有误")
return -1
if n==1 or n==2:
return 1
else:
return tu(n-1)+tu(n-2)
jieguo=tu(20)
if jieguo!=-1:
print("20个月后一共有%d对兔子"%jieguo)
----------------------------------------
20个月后一共有6765对兔子
============== 递归有优势 也有劣势 必须使用得当 ====================
6.6.4 汉诺塔【难点,未突破,放置......】
代码如下
def hnt(n,x,y,z)
if n==1:
print(x,"------->",z) #如果只有一层,直接从x移动到z
else:
hnt(n-1,x,z,y)#将前n-1个盘子从X移动到Y上
print(x,"------->",z)将#最底下的第64个盘子从X移动到Z上
hnt(n-1,y,x,z)将#Y上的63个盘子移动到Z上
n=int(input("请输入汉诺塔的层数:"))
hnt(n,"X","Y","Z")

原文地址:https://www.cnblogs.com/daodantou/p/10317692.html

时间: 2024-11-08 22:55:56

第六章 函数[DDT书本学习 小甲鱼]【3】的相关文章

第六章 函数[DDT书本学习 小甲鱼]【1】

6.1Python的乐高积木 程序分解为小的组成部分.三种方法实现:函数.对象.模块6.1.1 创建和调用函数 以前接触到的BIF就是Python帮我们封装好的函数 def 德芙 关键字: 代码如下 def myFirstFunction(): print("大家好,我是新来的1") print("大家好,我是新来的2") print("大家好,我是新来的3") myFirstFunction() 重复三次,该如何做? for i in rang

第九章 异常处理[DDT书本学习 小甲鱼]【1】

9.1 你不可能总是对的举例如下file_name=input("请输入文件的名称:")s="C:\\Users\\Daodantou\\Desktop\\"+file_namef=open(s,"r",encoding="UTF-8")print("文件的内容是:")for each in f: print(each)-------------------------------请输入文件的名称:reco

第八章 永久存储[DDT书本学习 小甲鱼]【2】

8.1.6 一个任务题目:将record.txt中的对话进行分割,并按照以下规则进行保存起来.1.小甲鱼的对话单独保存为boy_*.txt的文件(去掉"小甲鱼:")2.小客服的对话单独保存为girl_*.txt的文件(去掉"小客服:")3.文章中有三段对话,分别保存为boy_1.txt.boy_2.txt.boy_3.txt.girl_1.txt.girl_2.txt.girl_3.txt.共6个文件.(提示:每段对话用"==="隔开了)****

第七章 字典和集合[DDT书本学习 小甲鱼]【3】

4.copy() 复制字典a={1:"one",2:"two",3:"three"}b=a.copy()print(id(a))print(id(b))a[1]="four"print(a)print(b)-------------------24311023227282431102322800{1: 'four', 2: 'two', 3: 'three'}{1: 'one', 2: 'two', 3: 'three'}==

第三章 必须知道的一些基础知识[DDT书本学习 小甲鱼]【2】

3.6 条件分支========================完成第一个要求 提示作用 计算机如何比较 > < == != >= <= 操作符 开始例子源码 '''=========猜数字游戏==============''' i=7 number=input("猜猜我手中的数字是?:") n=int(number) if n==i: print("你猜对了!") else: if n>i: print("猜大了"

第四章 了不起的分支和循环[DDT书本学习 小甲鱼]【2】

4.4 Python可以有效避免"悬挂else" Python的缩进使用强制规定使得代码必须正确对齐,else属于那个if清晰可见.4.5 条件表达式(三元操作符) 代码 if x<y: small=x else: small=y 将以上代码用三元操作符来表示 语法 a=x if 条件 else y 含义:如果条件真则a=x,如果条件假则a=y. 代码改进 small=x if x<y else y Python的代码简洁高效!!!4.6 断言 assert 是分支if的近

第五章 列表、元组和字符串[DDT书本学习 小甲鱼]【4】

5.1.9 关于分片"拷贝"的概念补充 [真正的拷贝是切片] 代码 list1=[1,3,2,9,7,8] list2=list1[:] print(list2) list3=list1 print(list3) ---------------------- [1, 3, 2, 9, 7, 8] [1, 3, 2, 9, 7, 8] 以上代码看似一样的输出结果,事实上呢,作如下修改后 list1 = [1, 3, 2, 9, 7, 8] list2 = list1[:] list3=l

第五章 列表、元组和字符串[DDT书本学习 小甲鱼]【1】

5.1 列表:一个"打了激素"的数组 很多编程语言里,数组是把一大堆同类型的数据挨个摆在一起,然后通过数组下标进行索引. Python没有数组,但是Python加入了更为强大的[列表].5.1.1 创建列表 例如 number=[1,2,3,4,5] 打了激素过后 例如 mix=[1,"daodantou",3.14,[1,2,3]] 鱼龙混杂的列表 也可以空列表 mix=[]5.1.2 向列表添加元素 可以是使用append()方法 [它不是BIF,是列表对象的一

第五章 列表、元组和字符串[DDT书本学习 小甲鱼]【6】

5.3.1 字符串的各种内置方法 表5-1很多暂时略掉!!!!!!!!! 选择几个常用的演示一下 casefold()方法,它的作用是将字符串的所有字符变为小写 代码 str1="DaoDanTou" print(str1.casefold()) ------------------------ daodantou count(sub[,start[,end]]) 作用:查指定范围内sub字符串出现次数 代码 str1="AbcABCabCabcABCabc" pr