python函数的使用场景_Python 高阶函数及使用场景

Python有一些高阶函数,能够非常容易的解决一些比较特殊的场景问题。常用的几个函数如下所示。

1. map

场景一:

有一批值或者数据,需要重复的执行同一个逻辑过程。用map函数把list中所有数字转为字符串:

>>> list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))

['1', '2', '3', '4', '5', '6', '7', '8', '9']

实例场景:有一批用户名数据,现要求根据用户名,生成随机密码,给每个用户分配一个密码。

代码演示:

# user = ["xxxx",""]

def gen_password(user):

from random import randint

# 生成随机密码

str_password = ""

str_str = "abcdefghij"

for i in range(8):

num = randint(0, 9)

str_password = str_password + str_str[num]

password = str_password + user[0] + str_password # 用用户名拼接一个密码

user[1] = password

print("用户生成的随机信息是: {}".format(user))

return user

def demo1():

# 场景一: 密码生成

users_data = [

["admin", ""],

["userone", ""],

["aturx", ""],

["lisiyi", ""],

["whoareyou", ""]

]

result = map(gen_password, users_data)

print(list(result))

demo1()

2. reduce

场景二:

reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,

reduce把结果继续和序列的下一个元素做计算,其效果就是:

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

实例场景:现有一个软件系统一年内每个月利润值,想要统计全年总利润。

代码演示:

def new_add_user(before, now):

new_add = now + before

return new_add

def demo2():

# 场景二: 累计统计

data = [

1000, 1300, 1500, 4572,

1976, 2230, 1212, 2222,

1567, 2621, 3000, 2320

]

from functools import reduce

all = reduce(new_add_user, data)

print(all)

demo2()

3. filter

场景三:

Python内建的filter()函数用于过滤序列。

和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

实例场景:某系统有大量注册用户,先需要在一批注册用户中,找到年龄为40岁以上的男性用户。该场景非常适合使用过滤器。

代码演示:

def is_man(user):

# 过滤40岁以上男性

if user[0] == "man" and user[1] > 40:

return True

else:

return False

def demo3():

# 场景三: 过滤特定数据

data = [

["man", 30],

["woman", 22],

["woman", 22],

["man", 42],

["woman", 22],

["man", 52],

["woman", 22],

["man", 12],

["woman", 62],

["man", 48],

["man", 62],

["woman", 22],

["man", 39],

["woman", 22],

]

result_data = filter(is_man, data)

print(list(result_data))

demo3()

4. sorted

场景四:

排序也是在程序中经常用到的算法。无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小。如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来。

sorted()函数是一个高阶函数,它还可以接收一个key函数来实现自定义的排序。

实例场景: 现有一个班级学生的考试成绩单,先需要分别根据数学成绩排名(100分制)、英语成绩(ABCD制)排名。该场景适合自定义排序。

代码演示:

def get_m_sort(student):

# 返回数学分值

return student[1]

def get_e_sort(student):

# 返回英语分值

return student[2]

def sorted_by_math(students):

result = sorted(students, key=get_m_sort, reverse=True) # 数字降序排列

return result

def sorted_by_english(students):

result = sorted(students, key=get_e_sort)

return result

def demo4():

# 名字, 数学成绩, 英语成绩

students = [

["people1", 99, "C"],

["people2", 78, "B"],

["people3", 85, "B"],

["people4", 63, "F"],

["people5", 79, "C"],

["people6", 68, "D"],

["people7", 53, "A"],

]

order_by_math = sorted_by_math(students)

order_by_english = sorted_by_english(students)

print("数学排名: ", order_by_math)

print("*" * 10)

print("英语排名: ", order_by_english)

demo4()

阅读量

loading...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值