跟着我们一起学 Python 30天课程-第12天-Lambda Expressions & Comprehensions

作者 : IT 大叔 本文共3842个字,预计阅读时间需要10分钟 发布时间: 2020-08-21

函数式编程本身是一个很大的主题,并且其中包含很多要理解和掌握的概念。但是,我的目标是在30天内学习Python,因此我宁愿理解关键概念并学习在构建实际项目中会用到的最常用的技术。

昨天,我探讨了函数式编程的基础以及如何在Python中实现它。今天,我探索了缺失的部分,并在此过程中遇到了非常有趣的发现,我将在本文中分享。

Lamba Expressions

Lambda实际上是计算机科学中的一个术语,它表示一个匿名函数,该匿名函数在执行表达式时仅使用一次。
Lambda表达式对于简化代码并使功能更简洁和紧凑非常有用。但是,在复杂的评估中过度使用它们会降低代码的可读性。每一件很酷的事情都需要权衡!

在研究了它们的语法和用例之后,我立刻想到了JavaScript世界中的箭头函数语法,尽管它们并不完全相似。

names = ['John', 'Peter', 'Elon', 'Joseph']

# make all names upper cased
uppercased = list(map(lambda name: str.upper(name), names))

print(uppercased)

lambda接受任意数量的参数(此处为name)和涉及参数的表达式(此处为str.upper(name))。

users = [('Mary', 23), ('Emilie', 10), ('Katie', 30)]

sorted_by_name = sorted(users)
print(sorted_by_name) 
# [('Emilie', 10), ('Katie', 30), ('Mary', 23)]

sorted_by_age = sorted(users, key = lambda item: item[1]) 
# using age as key for sorting 

print(sorted_by_age)
# [('Emilie', 10), ('Mary', 23), ('Katie', 30)]
scores = [23, 55, 20, 90, 34, 53]

scores_under50 = list(filter(lambda x: x < 50, scores))
print(scores_under50) # [23, 20, 34]

Comprehensions

Comprehensions是Python的另一个很酷的功能,我发现它非常有用。它们被用于快速建立数据结构,例如listsetdict在紧凑的语法,据说更快相比,创建循环使用相同的数据结构。

用理解代替循环通常很诱人。但是,就可读性而言,编写巧妙的代码并不总是很好。因此,应避免冗长的单线理解,因为它看起来非常紧凑,但可能会伤人的大脑。

Python中的推导类型如下-列表推导,集合推导和Dict推导。

List Comprehension

假设我们必须从一个字符串创建一个字符列表,简单的方法就是这样

name = 'python'

new_list = []
for character in name:
  new_list.append(character)

print(new_list) 
# ['p', 'y', 't', 'h', 'o', 'n']

但是,使用列表理解可以更加简洁

name = 'python'
new_list = [item for item in name] # here item can be any name

print(new_list)
# Quickly generates a list of 10 items with their values squared
new_list = [item**2 for item in range(10)]
print(new_list) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

也可以为理解添加条件

numbers = [2,34,23,53,34,12,22,89]

even_numbers = [num for num in numbers if num % 2 == 0]
print(even_numbers) # [2, 34, 34, 12, 22]
brands = [
  {'name': 'Nike', 'category': 'shoes'},
  {'name': 'Reebok', 'category': 'shoes'},
  {'name': 'Tesla', 'category': 'cars'},
  {'name': 'Adidas', 'category': 'shoes'},
  ]

car_brands = [item for item in brands if item['category'] =='shoes']
print(car_brands) # filters out Tesla

Set Comprehension

names = ['Rick', 'Alan', 'Rick', 'Mike']
new_set = {item for item in names}

print(new_set) # {'Mike', 'Alan', 'Rick'}

Dictionary Comprehension

attendance = {
    'John': True,
    'David': False,
    'Nick': True,
    'Tom': False,
    'Marie': False,
    'Nancy': True
}

students_present = {key:value for key,value in attendance.items() if value}
print(students_present)
# {'John': True, 'Nick': True, 'Nancy': True}

快速编码练习

从名称列表中,过滤出重复的名称并存储在列表中。

我在探索循环和功能之前解决了这个问题。今天将尝试使用理解力重新创建解决方案

names = [
    'Harry', 'Johnny', 'Lewis', 'Harry', 'Buck', 'Nick', 'David', 'Harry',
    'Lewis', 'Michael'
]

duplicate_names = list(set([name for name in names if names.count(name) > 1]))

print(duplicate_names) # ['Lewis', 'Harry']

该解决方案是单线的,看起来非常聪明,但是有人可以反对它的可读性较差。

无论如何,知道替代品是件好事。我更喜欢在实际项目中编写代码时比较冗长,因此代码不太聪明,代码也更易读。

这就是今天对函数式编程的探索。我认为我已经基本涵盖了大多数要点。

明天,我计划深入decorators in python。我相信这会令人兴奋和有趣。

跟着我们一起学 Python 30天课程目录:

  1.  跟着我们一起学 Python 30天课程-第30天-免费Python资源 
  2.  跟着我们一起学 Python 30天课程-第29天-自动化测试 
  3.  跟着我们一起学 Python 30天课程-第28天-ML和数据科学II 
  4.  跟着我们一起学 Python 30天课程-第27天-ML和数据科学I 
  5.  跟着我们一起学 Python 30天课程-第26天-机器学习基础 
  6.  跟着我们一起学 Python 30天课程-第25天-Web 开发进阶
  7.  跟着我们一起学 Python 30天课程-第24天-Web开发基础 
  8.  跟着我们一起学 Python 30天课程-第23天-网页爬虫 
  9.  跟着我们一起学 Python 30天课程-第22天-脚本额外功能Scripting Extras 
  10.  跟着我们一起学 Python 30天课程-第21天-脚本编写基础 
  11.  跟着我们一起学 Python 30天课程-第20天-调试和测试 
  12.  跟着我们一起学 Python 30天课程-第19天-正则表达式 
  13.  跟着我们一起学 Python 30天课程-第18天-文件I / O 
  14.  跟着我们一起学 Python 30天课程-第17天-外部模块External Modules 
  15.  跟着我们一起学 Python 30天课程-第16天-模块基础Module Basics 
  16.  跟着我们一起学 Python 30天课程-第15天-生成器Generators 
  17.  跟着我们一起学 Python 30天课程-第14天-错误处理Error Handling 
  18.  跟着我们一起学 Python 30天课程-第13天-Decorators 
  19.  跟着我们一起学 Python 30天课程-第12天-Lambda Expressions & Comprehensions 
  20.  跟着我们一起学 Python 30天课程-第11天-函数编程Functional Programming基础 
  21.  跟着我们一起学 Python 30天课程-第10天-OOP Missing Pieces 
  22.  跟着我们一起学 Python 30天课程-第9天-OOP Pillars 
  23.  跟着我们一起学 Python 30天课程-第8天-OOP基础知识 
  24.  跟着我们一起学 Python 30天课程-第7天-开发环境搭建(Developer Environment) 
  25.  跟着我们一起学 Python 30天课程-第6天-循环II和函数(Loops II & Functions) 
  26.  跟着我们一起学 Python 30天课程-第5天-条件和循环I(Conditions & Loops I) 
  27.  跟着我们一起学 Python 30天课程-第4天-数据类型III(Data Types III) 
  28.  跟着我们一起学 Python 30天课程-第3天-数据类型II(Data Types II) 
  29.  跟着我们一起学 Python 30天课程-第2天-数据类型I(Data Types I) 
  30.  跟着我们一起学 Python 30天课程-第1天-简介 
免责声明:
1. 本站资源转自互联网,源码资源分享仅供交流学习,下载后切勿用于商业用途,否则开发者追究责任与本站无关!
2. 本站使用「署名 4.0 国际」创作协议,可自由转载、引用,但需署名原版权作者且注明文章出处
3. 未登录无法下载,登录使用金币下载所有资源。
IT小站 » 跟着我们一起学 Python 30天课程-第12天-Lambda Expressions & Comprehensions

常见问题FAQ

没有金币/金币不足 怎么办?
本站已开通每日签到送金币,每日签到赠送五枚金币,金币可累积。
所有资源普通会员都能下载吗?
本站所有资源普通会员都可以下载,需要消耗金币下载的白金会员资源,通过每日签到,即可获取免费金币,金币可累积使用。

发表评论