欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python3入门与进阶笔记:函数

程序员文章站 2022-07-09 23:23:11
一、匿名函数作用:简化函数定义格式:lambda 参数1[,参数2,...]: 运算我们可以看到匿名函数和add函数的功能是一样的,通常不需要频繁调用且函数体简单的可以用匿名函数。下面我们来类比一下:匿名函数没有名字,故也不存在类似add这样的函数名。我们可以看到lambda关键字后面是参数列表,相当于add的形参列表我们可以看到:后面的a+b,其实就是针对参数的运算并返回, 类似于return匿名函数的使用,我们可以看到可以通过add()调用,也可以将add的......

目录

一、匿名函数

二:匿名函数 + 内置函数

三、递归函数


 

 

一、匿名函数

作用:简化函数定义

格式:lambda 参数1[,参数2,...]: 运算
我们可以看到匿名函数和add函数的功能是一样的,通常不需要频繁调用且函数体简单的可以用匿名函数。 下面我们来类比一下:

  • 匿名函数没有名字,故也不存在类似add这样的函数名。
  • 我们可以看到lambda关键字后面是参数列表,相当于add的形参列表
  • 我们可以看到:后面的a+b,其实就是针对参数的运算并返回, 类似于return
  • 匿名函数的使用,我们可以看到可以通过add()调用,也可以将add的地址赋给f,通过f()调用。匿名函数lambda a, b: a + b同样也可以将其赋给s,通过s()调用,我们注意一下,这边s = lambda a, b: a + b,仅相当于定义匿名函数,并将该函数的地址赋给s,并没有调用
def add(a, b):
    return a + b
f = add
print(f, add, f(1, 3), add(1, 3))

s = lambda a, b: a + b
print(s, s(1, 3))
<function add at 0x12ab16700> <function add at 0x12ab16700> 4 4
<function <lambda> at 0x12ab16160> 4

函数可以作为另一个函数的实参,匿名函数也是函数,所以匿名函数可以作为参数传递给另一个函数func,并且在func中可以调用。

def func(x, y, lambda_func):
    print(lambda_func)
    print(lambda_func(x, y))
func(1, 2, lambda a, b: a + b)
<function <lambda> at 0x12b2c4550>
3

二:匿名函数 + 内置函数

def compare(item):
    return item.get('a')
list_dic = [{'a': 2, 'b': 3}, {'a': 0, 'b': 7}, {'a': 5, 'b': 1}]
print(max(list_dic, key=lambda item: item.get('a')))
print(max(list_dic, key=compare))
{'a': 5, 'b': 1}
{'a': 5, 'b': 1}

map() 会根据提供的函数对指定序列做映射。第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

def add_2(item):
    return item + 2
l = [1, 2, 3, 4]
print(list(map(lambda item: item + 2, l)))
print(list(map(add_2, l)))
[3, 4, 5, 6]
[3, 4, 5, 6]

 lambda关键字也可以与if语句结合使用,例如,下面的表示对奇数加一。

s = lambda x: x if x % 2 == 0 else x + 1
print(s(11))
l = [1, 2, 7, 4]
print(list(map(lambda x: x if x % 2 == 0 else x + 1, l)))

reduce() 函数会对参数序列中元素进行累积。函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:

  • 用传给 reduce 中的函数 function(有两个参数)
  • 先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

若有初始值,函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:

  • 用传给 reduce 中的函数 function(有两个参数)
  • 先对初始值和集合中的第 1个元素进行操作,得到的结果再与第2个数据用 function 函数运算,最后得到一个结果。
from functools import reduce
t1 = (1, )
print(reduce(lambda x, y: x - y, t1))
print(reduce(lambda x, y: x - y, t1, 10)) 

print('=' * 30)

t1 = [1, 2, 3, 5]
print(reduce(lambda x, y: x - y, t1)) # 1 - 2 = -1, -1 - 3 = -4, -4 - 5 = -9
print(reduce(lambda x, y: x - y, t1, 10)) # 10 -1 = 9, 9 - 2 = 7, 7 - 3 = 4, 4 - 5 = -1
1
9
==============================
-9
-1

filter: filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

students= [{'name': 'Lily', 'age': 20}, {'name': 'Lucy', 'age': 22}, 
           {'name': 'Ami', 'age': 19}, {'name': 'Jolie', 'age': 17}]
filter_stu =list(filter(lambda stu: stu['age'] >= 20, students))
sorted_stu = sorted(students, key=lambda stu: stu.get('age'))
print('students: {}'.format(students))
print('filter_stu: {}'.format(filter_stu))
print('sorted_stu: {}'.format(sorted_stu))
students: [{'name': 'Lily', 'age': 20}, {'name': 'Lucy', 'age': 22}, {'name': 'Ami', 'age': 19}, {'name': 'Jolie', 'age': 17}]
filter_stu: [{'name': 'Lily', 'age': 20}, {'name': 'Lucy', 'age': 22}]
sorted_stu: [{'name': 'Jolie', 'age': 17}, {'name': 'Ami', 'age': 19}, {'name': 'Lily', 'age': 20}, {'name': 'Lucy', 'age': 22}]

三、递归函数

# 计算0-10的和
def sum(i):
    if i == 10:
        return 10
    return sum(i + 1) + i
print(sum(0))

def sum(i):
    if i == 0:
        return 0
    return sum(i - 1) + i
print(sum(10))
55
55

关于递归过程的解释 

Python3入门与进阶笔记:函数

 

 

 

 

本文地址:https://blog.csdn.net/qq_xuanshuang/article/details/109914713