4.4(三元运算符,列表推导式 |字典推导式, 递归,匿名函数,内置函数,面向过程概念)

一.三目运算符

三目运算符:if…else…语句的简化,语法糖。
前提:简化if…else…结构,且两个分支有且只有一个语句。
注 :三元运算符不条件一定要与结果有直接关系。

# 求两个数最大值
a = 20
b = 30
res = a if a > b else b # 求最大值
print(res)
# 结果不一定要与条件有直接性 关系
 res = 'a为小值' if a > b else 'b为小值'

二.列表推导式|字典推导式

推导式:列表(元组)与字典的转换语法糖。

列表(元组)推导式:

dic = {'a' : 1, 'b' : 2, 'c' : 3}
res = {(k,v) for k,v in dic.items()}
print(res)
# 元组推导式
res = ((k, v) for k,v in dic.items())
print(tuple(res))

字典推导式

ls = [('a', 1), ('b', 2),('c', 3)]
res = {k: v for k, v in ls}
print(res)

# range(10)可以被推导为列表
res_ls = [arg for arg in range(10)]
print(res_ls)
res = {'a': arg for arg in range(10)}
print(dic)


三.递归

递归:回溯与递推
回溯:询问答案的过程
递推:推出答案的过程

前提:
回溯到一个具体结果的值,开始递推
回溯与递推的条件要有规律
递归本质:
函数的自我调用。

import sys
sys.setrecursionlimit(100)  # 手动设置递归深度
print(sys.getrecursionlimit) # 默认1000

count = 0
def a():
	global count
	count += 1
	if count  > 50:
		return
	a()
a()
# 函数间接调用自己:一但形成循环调用,就产生了递归


递归案例:

# 询问第一个人年龄,回溯条件 小两岁,第五个人说出自己的年龄,推导出第一个人年龄
# 条件:下一个人的年龄比这个人年纪大两
def get_age(num):
	if num = 1
		return 88
	res = get_age(num-1) - 2
	return res
age = get_age(5)
print(age)


# 阶乘
# 5! = 5 * 4!    4! = 4 * 3!   ...   2! = 2 * 1

def func(num):
	if num = 1
		return num
	res = num * func(num-1)
	return res
s = func(10)
print(s)

	

四.匿名函数

匿名函数:没有名字的函数
语法:lambda 参数列表:一个返回值的表达式
特征:没有函数名,函数体,只有一个返回值
关键字:lambda | 参数列表()| 返回值return关键字 被省略。

f = lambda x, y : x + y
print(f(20, 30))

应用场景:
1.匿名函数函数地址可以被一个变量接收,该变量就可以作为函数名来使用。
2.结合内置函数来使用,内置函数需要一个函数地址。

def fn(arg):
	return arg
ls = [100, 200, 50, 40]
res = max(ls , key = fn)


res1 = max(ls, key = lambda ele:ele)
print(res1)


五.内置函数

官网:https://docs.python.org/zh-cn/3.7/library/functions.html
1.max(arg1, arg2, args, key=)

ierable = [1,5,7,3,9]
res = max(iterable, key=lambda x: x) # 参数:可迭代对象遍历的元素:返回值: 作比较的值
print(res)

2.min(arg1, arg2, args,key=)

res = min(iterable, key=lambda k: iterable[k])

3.sorted(iterable, key=lambda x: x, reverse=True)
(排序)

res = sorted([1, 5, 3, 4, 2], key=lambda x: x,reverse=True)

4.map(func, iter)映射

res = map(lambda x: x + 2,[12000, 36000,5200])

5.reduce():合并

res = reduce(lambda f, n: f * n,[1,2,3,4,5])
print(res)

六.面向过程

1、首先强调:面向过程编程绝对不是用函数编程这么简单,面向过程是一种编程思路、思想,而编程思路是不依赖于具体的语言或语法的。言外之意是即使我们不依赖于函数,也可以基于面向过程的思想编写程序。
2、定义
面向过程的核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么。
3、优点:复杂的问题流程化,进而简单化。
4、缺点:可扩展性差,修改流水线的任意一个阶段,都会牵一发而动全身。
5、应用:扩展性要求不高的场景,典型案例如linux内核,git,httpd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值