

编辑(Kanwal Mehrin)Canva的图像
# 介绍
您是否曾经盯着充满情节和电台的Python文字,想知道是否有一种更简单的方法可以完成?我也在那里。几年前,我花了几个小时重写大声数据处理的文本,直到同事提到一场演出。您为什么不尝试Lambda工作?“这一建议不仅使我的代码变成了我的代码 – 而且我如何处理贝森的问题。
让我们谈谈如何 伯森的工作编程 它可以帮助您编写清洁度,并且比代码更具表现力。无论您是由任务,数据分析还是应用程序自动化,掌握Lambda功能和更高的安排功能都会提高您的技能水平。
# 什么是功能编程?
工作编程(FP)类似于面包,而不是冷冻的芯片微波炉。您可以确定所需的内容(成分),而不是逐步更改数据(微波说明),并让功能处理“如何”(面包)。基本想法是:
- 纯工作没有副作用。相同的输入总是产生相同的输出
- 非变化数据避免更改变量;而是从中创建
- 一级工作:处理诸如变量之类的功能 – 通过它们,退回并存储它们
Python不是一种纯粹的功能性语言(例如Haskell),但它足够灵活,可以借用它们发光的FP概念。
# Lambda工作:快速维修Biton
// LAMDA的功能是什么?
Lambda功能是您在飞行时确定的小型未知功能。将其视为“功能的功能”,而不是全餐。
简单的句子构造:
lambda arguments: expression
例如,这是一个传统功能:
def add(a, b):
return a + b
这是lambda版本:
// 您什么时候应该使用LAMDA功能?
lambda功能是完美的一次。例如,根据第二个元素对单元进行排序时:
students = [("Alice", 89), ("Bob", 72), ("Charlie", 95)]
# Sorts by grade (the second element of the tuple)
students.sort(key=lambda x: x[1])
常见案例包括:
- 内部高阶功能:他们完全合作
map()
和filter()
, 或者reduce()
- 避免琐碎的助手职能:如果您需要一个简单的帐户一次,Lambda功能将带您设置完整功能
但是要当心:如果您的lambda功能看起来过于复杂,例如 lambda x: (x**2 + (x/3)) % 4
,是时候写一个合适的工作了。 lambdas是简单性,而不是创建一个加密的符号。
# 最高订单功能
HOFS工作是功能:
- 将其他工作作为原因或
- 返回工作作为结果
Python中的Hofs Compact是您最好的新朋友。让我们分开它们。
// 地图:无情节传输数据
这 map()
该作业将另一个功能应用于组中的每个元素。例如,让我们将温度从摄氏固定转换为华氏。
celsius = [23, 30, 12, 8]
fahrenheit = list(map(lambda c: (c * 9/5) + 32, celsius))
# fahrenheit is now [73.4, 86.0, 53.6, 46.4]
为什么使用 map()
?
- 避免手动循环的索引
- 它通常比简单的转换列表更干净
// 候选人:保留您的需求
这 filter()
该作业确定可靠的要素,这些要素符合特定条件。例如,让我们在列表中找到婚姻数字。
numbers = [4, 7, 12, 3, 20]
evens = list(filter(lambda x: x % 2 == 0, numbers))
# evens is now [4, 12, 20]
// 减少:结合一切
这 reduce()
工作,来自 功能 刻板印象,值从可靠到一个结果收集。例如,您可以使用它来计算菜单中所有数字的产品。
from functools import reduce
numbers = [3, 4, 2]
product = reduce(lambda a, b: a * b, numbers)
# product is now 24
// 建立您的安排功能
您也可以创建HOF。让我们创建一个“重新攻击”,如果失败,可以重新启动工作:
import time
def retry(func, max_attempts=3):
def wrapper(*args, **kwargs):
attempts = 0
while attempts < max_attempts:
try:
return func(*args, **kwargs)
except Exception as e:
attempts += 1
print(f"Attempt {attempts} failed: {e}")
time.sleep(1) # Wait before retrying
raise ValueError(f"All {max_attempts} attempts failed!")
return wrapper
您可以将此HOF用作装饰。想象一下,由于网络错误,您的工作可能失败:
@retry
def fetch_data(url):
# Imagine a risky network call here
print(f"Fetching data from {url}...")
raise ConnectionError("Oops, timeout!")
try:
fetch_data("https://api.example.com")
except ValueError as e:
print(e)
// 混合Lambdas和Hofs:动态二人
让我们收集这些工具以处理以下要求处理用户记录:
- 检查电子邮件的健康,以确保它们由“@gmail.com”完成
- 利用用户名
signups = [
{"name": "alice", "email": "alice@gmail.com"},
{"name": "bob", "email": "bob@yahoo.com"}
]
# First, capitalize the names
capitalized_signups = map(lambda user: {**user, "name": user["name"].capitalize()}, signups)
# Next, filter for valid emails
valid_users = list(
filter(lambda user: user["email"].endswith("@gmail.com"), capitalized_signups)
)
# valid_users is now [{'name': 'Alice', 'email': 'alice@gmail.com'}]
# 常见的恐惧和最佳实践
// 阅读能力
一些开发人员发现,复杂的Lambdas或HOF可能很难阅读。要保持清晰度,请遵循以下规则:
- 将lambda功能的身体保存到一个简单的表达
- 使用变量和描述性名称(例如,
lambda student: student.grade
)) - 对于复杂的逻辑,您总是更喜欢标准
def
工作
// 表现
功能编程较慢吗?有时。通信功能的一般费用可能略高于循环。对于小数据组,这种差异很小。对于执行大型数据组的关键操作,您可能会考虑发电机或工作 itertools
单位,喜欢 itertools.imap
。
// 您什么时候避免功能编程?
FP是一种工具,而不是银弹。在这些情况下,您可能需要遵守对物体的必要或定向方式:
- 如果您的团队对功能编程概念不满意,则可能很难维护代码
- 对于复杂的国家管理,类别和生物通常是一个简单的解决方案
# 现实世界中的示例:数据分析很简单
想象一下,您正在分析Uber Ride距离,并想计算超过三英里的骑马的平均骑行距离。这是工作编程如何简化任务:
from functools import reduce
rides = [2.3, 5.7, 3.8, 10.2, 4.5]
# Filter for rides longer than 3 miles
long_rides = list(filter(lambda distance: distance > 3, rides))
# Calculate the sum of these rides
total_distance = reduce(lambda a, b: a + b, long_rides, 0)
# Calculate the average
average_distance = total_distance / len(long_rides)
# average_distance is 6.05
您准备好体验功能编程了吗?开始小:
- 用简单的循环用
map()
- 使用循环内的重构有条件检查
filter()
- 在评论中分享您的代码 – 我喜欢看到它
# 结论
工作编程 在Python中,与信念无关 – 它具有更多的工具来编写清晰有效的符号。 LAMDA工作 和 最高订单功能 瑞士军刀类似于您的编码集:不是每项工作,而是方便的。
您有一个很棒的问题或例子吗?在下面发表评论!
Shittu Olumide 他是一位软件工程师和技术作家,他热衷于利用先进的技术来制作令人信服的小说,并提供Ain Harda的细节和人才来简化复杂的概念。您也可以在 叽叽喳喳。