关于python:我只不过是个python王者前篇002之递归函数匿名函数内置函数

6次阅读

共计 1845 个字符,预计需要花费 5 分钟才能阅读完成。

前篇的意思就是说 …… 我还没有成为 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]。

正文完
 0