一.三目运算符
三目运算符: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