文章目录
匿名函数
匿名函数指一类无需定义标识符的函数或子程序。python用lambda语法定义匿名函数,
匿名函数中有必选参数
1. 必选参数:必须要传递的参数
# def get_max(num1:int , num2:int )->int:
# return num1 if num1 > num2 else num2
get_max = lambda num1, num2: num1 if num1 > num2 else num2
print(get_max(10, 20 ))
匿名函数中有默认参数
# #2.默认参数:可传可不传的参数
#
# def pow(x, y=3):
# return x**y
# result = pow(3)
# print(result)
# result = pow(2, 4)
# print(result)
pow = lambda x, y=2: x ** y
print(pow(2, 2))
匿名函数的例题
"""
给定一组整型数组, 将数组中所有的0移动到末尾, 非0项保持不变
-输入: 数组的记录: 0 7 0 2
-输出: 调整后数组内容: 7 2 0 0
"""
解决方法1(通过排序完成)
nums = [0, 7, 0, 2]
result = sorted(nums)
print(result)
nums = [0, 7, 0, 2]
result = sorted(nums, reverse=True)
print(result)
局限性:只能适用于特殊的数组,不能使用于含有负数,改变原本非零项的顺序
解决方法2 (通过匿名函数排序完成)
"""
给定一组整型数组, 将数组中所有的0移动到末尾, 非0项保持不变
-输入: 数组的记录: 0 7 0 2
-输出: 调整后数组内容: 7 2 0 0
0 7 0 2 - brfore sort
1 0 1 0 - rule: (1 if num==0 else 0)
0 0 1 1
7 2 0 0 - after sort
"""
实现代码:
nums = [0, 7, 0, 2]
nums.sort(key=lambda num: 1 if num == 0 else 0)
print(nums)
例题2
# 需求:将所有的偶数排前面, 所有的奇数排后面
nums = [4, 7, 2, 0, 0]
nums.sort(key=lambda num: 0 if num % 2 == 0 else 1)
print(nums)`
递归函数
leetcode 二叉树的题目, 大部分需要递归
递归函数: 自己调用自己的函数
例题
需求: 求n的阶乘。 n!=n*(n-1)…*1
利用for循环实现
# 方法1: for循环
# res = 1
# n = 3
# for i in range(1, n+1):
# res = res * i
# print(res)
利用递归函数实现
# 方法2 :递归
# 递归的规律和推出递归的条件
# 计算阶乘
def f(n):
if n == 1:
return 1
return n * f(n-1)
print(f(5))
利用递归函数实现斐波那契数列
斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从 1963 年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。
def fib(n):
"""
fib数列
"""
if n==1 or n==2:
return 1
return fib(n-1) + fib(n-2)
# 1 1 2 3 5 8 13
print(fib(7))