Bethon中的职位编程:利用Lambda功能和更高的排名

Bethon中的职位编程:利用Lambda功能和更高的排名
Bethon中的职位编程:利用Lambda功能和更高的排名
编辑(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的细节和人才来简化复杂的概念。您也可以在 叽叽喳喳



Source link

Similar Posts