python基础--递归,高阶函数介绍(九)

# 递归,简单来说就是自己引用自己,在函数中就是自己调用自己
# 	求10的阶乘
def fn(num):
	for x in range(1,num):
		num *= x
	return num
print(fn(10))

# 递归是解决问题的一种方式,类似于循环
# 递归函数的两个要件
# 	基线条件:问题可以被分解为最小的问题,当满足基线条件时,递归就不在执行了
# 	递归条件:将问题继续分解的条件

def factorial(n):
	if n == 1:
		return 1
	else :
		return n * factorial(n-1)
print(factorial(8))


# 求任意一个数的n次幂
def power(n,i):
	if i == 1:
		return n
	else:
		return n * power(n , i-1)
print(power(8,6))

# 检查一个字符串是否是回文
# abcddbca
def huiwen(s):
	if len(s) < 2:
		return True
	elif s[0] != s[-1]:
		return False
	else :
		return huiwen(s[1:-1])
print(huiwen('abcddcba'))

# 高阶函数:接受函数作为参数。
l = [1,2,3,4,5,6,7,8,9]

# 定义一个函数,将制定列表中的所有偶数保存到新列表返回
def fn1(func,lst):
	
	new_list = []
	for x in lst:
		# if x % 2 == 0:
		if func(x):
			new_list.append(x)
	return new_list


def fn2(n):
	if n % 2 != 0:
		return True
	return False

def fn3(n):
	if n > 4:
		return True
	return False

print(fn1(fn3,l))

# filter(),可以从序列中过滤出符合条件的元素保存到新的序列中
# 	参数:
# 		函数,根据该函数过滤序列
# 		需要过滤的序列
# 	返回值:
# 		过滤后的新序列
print(list(filter(fn2,l)))


# 匿名函数lambda表达式,一般作为参数使用
#  专门用来创建一些简单的函数,
fn4 = lambda a,b : a + b
print(fn4(10,12))
res = filter(lambda i : i > 5 ,l)
print(list(res))

# map() 函数可以对可迭代对象中所有元素做指定操作,并添加到新对象中返回。
res = map(lambda i : i ** 2, l)
print(list(res))

# sort() 用来对列表中的元素进行排序,默认是直接比较列表中元素大小
# 该函数可以接收一个关键字参数,key,
# 	key需要一个函数作为参数,当设置了函数作为参数,每次都会以列表中的一个元素作为参数来调用函数,并且使用函数的返回值来比较元素大小
l = ['aaa','ffas','ffqwe','fgf','jack','mark']
l.sort()
print(l)

# sorted() 该函数和sort()函数用法基本一致,但是sorted()可以对任意的序列进行排序
# 并且使用该函数不会对原来的对象产生影响,会返回一个新的对象
l = ['1',9,'2',3,'7',4,'5',5]
l = '12896425'
print(sorted(l,key=int))


# 将函数作为返回值的函数。
# 这种函数也称为闭包,通过闭包可以创建一些只有当前函数能访问的变量。
# 可以将私有的数据放在闭包中。
def fn():
	a = 10
	def inner():
		print('inn')
	return inner
fn()()

# 闭包的要件
# 	函数嵌套
# 	将内部函数作为返回值返回
# 	内部函数必须要使用外部函数的变量
def make_averager():
	nums = []
	def averager(n):
		nums.append(n)
		return sum(nums) / len(nums)
	return averager
averager = make_averager()
print(averager(10))
print(averager(20))
print(averager(30))

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值