前篇的意思就是说......我还没有成为python王者(想写大神竟然通不过),只是刚刚入了个门。总是在羡慕人家玩爬虫啊,办公自动化啊,还用python玩玩股票啊,看起来都牛逼哄哄。我也不愿再做小菜鸟了,我也要发家致富!第一步就是把我每天学到的东西记录下来,加深点印象。有没有骚年跟我一起冲!!!好了好了,我先冲。(如果小白看到了,对我所写的务必持怀疑态度,这只是我自己的笔记;如果大神偶尔瞄到了,我写错了麻烦纠正下哈!)
递归函数、匿名函数、内置函数
1. 递归函数
递归是一种编程思想,我不太好用语言解释,等下就用代码去解释;比如要遍历一个文件夹下的所有文件,通常就会使用递归来实现的。
1.1 递归的特点
- 函数内部自己调用自己
- 必须有出口
1.2 应用:3以内数字累加和
# 3 + 2 + 1
def sum_nums(num):
# 出口
if num == 1:
return 1
return num + sum_nums(num-1)
print(sum_nums(3))
emmm...递归是这样的,return 3+sum_nums(2)-->3+2+sum_nums(1)-->3+2+1,然后结果6就出来啦!
2. lambda函数
如果函数有一个返回值,并且只有一句代码,那么可以使用lambda简化。
2.1 lambda语法
举个例子吧:fn = lamdba a: a+1
等同于
def fn(num):
return num+1
注意:直接输出lambda表达式的话,输出的是lambda函数的内存地址,也要使用print(fn(2))这样的写法噢!
2.2 lambda的参数形式
- 无参数
lambda: 100
- 一个参数
lambda a: a
- 缺省参数
lambda a, b, c=100: a + b + c
- 不定长位置参数(返回元组)
lambda *args: args
- 不定长关键字参数(返回字典)
lambda **kwargs: kwargs
2.3 lambda的应用
- 应用一:判断数字的大小,输出大的数字
fn = lambda a, b: a if a > b else b
print(fn(20, 10))
- 应用二:列表数据按字典key排序
students = [
{'name': 'TOM', 'age': 20},
{'name': 'ROSE', 'age': 19},
{'name': 'Jack', 'age': 22}
]
# 以age的升序排列
students.sort(key=lambda x: x['age'])
print(students)
这里有两点说明一下:
- sort()中的参数key后面可以跟function,用于将有字典的列表按字典的key做排序;
- sort()还有一个参数是reverse,默认reverse=False为升序排列,reverse=True就是降序啦。
- sort()和sorted()
讲到排序顺便提一下这两个函数的区别,sort()是list的方法,而sorted不是,用代码就可以解释了。
# sort是在原列表的基础上作排序
aa = [2, 1, 3]
aa.sort() # 返回的是None
print(aa)
# sorted是返回一个新的列表,并且不是list的方法
bb = sorted(aa, reverse=True)
print(bb)
3. 内置函数
这里主要介绍3个高阶内置函数。
- map(func, lst)
将传入的函数作用到list的每个元素中,并将结果组成新的list,返回迭代器。
# map() 计算`list1`序列中各个数字的平方
list1 = [1,2,3,4,5]
def func_double(num):
return num ** 2
print(list(map(func_double, list1)))
输出的结果是[1, 4, 9, 16, 25];
- reduce(func, lst)
func必须有两个参数,每次func计算的结果继续和序列的下一个元素做累积计算。
import functools
# reduce() 计算list1序列中各个数字的累加和
def func_sum(a, b):
return a + b
print(functools.reduce(func_sum, list1))
输出的结果是15。
注意:reduce直接返回数值
- filter(func, lst)
过滤掉lst中不符合条件的元素, 返回一个 filter 对象。
# filter() 删除奇数留下偶数
def func_filter(num):
if num % 2 == 0:
return num
print(list(filter(func_filter, list1)))
输出结果为[2, 4]。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。