5个越早知道越好的Python特性

时间:2022-10-09 18:01:26 | 浏览:315

Kirill Sharkovski 发布在 Unsplash 杂志上的照片雷锋网AI开发者按,Python 是近十年来兴起的编程语言,并且被证明是一种非常强大的语言。我用 Python 构建了很多应用程序,从交互式地图到区块链。Python

Kirill Sharkovski 发布在 Unsplash 杂志上的照片

雷锋网AI开发者按,Python 是近十年来兴起的编程语言,并且被证明是一种非常强大的语言。我用 Python 构建了很多应用程序,从交互式地图到区块链。Python 有很多特性,初学者很难一开始就掌握所有的特性。

即使你是一个从其他语言(如 C 或 MATLAB)转换过来的程序员,用更高抽象级别的 Python 编写代码绝对是另一种体验。回顾起来,有很多 Python 特性如果我能早点知道,肯定能少走不少弯路。现在我想要重点介绍其中五个最重要的特性。

1.理解 List——压缩代码

很多人会将 lambda、map 和 filter 作为 Python 的「技巧」,每个初学者都应该学习这些技巧。虽然我相信它们是我们应该掌握的特性,但我发现由于缺乏灵活性,它们在大多数时候并不特别有用。

Lambda 是一种在一行中组合函数以供一次性使用的方法。如果函数被多次调用,性能将受到影响。另一方面,map 将函数应用于列表中的所有元素,而 filter 将获取满足用户定义条件的集合中元素的子集。

add_func = lambda z: z ** 2

is_odd = lambda z: z%2 == 1

multiply = lambda x,y: x*y


aList = list(range(10))

print(aList)

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

Anastase Maragos 发表在 Unsplash 杂志上的照片

列表理解是一种简洁而灵活的方法,可以使用灵活的表达式和条件从其他列表创建列表。它是由方括号构造的,它有一个表达式或一个函数,只有当元素满足某个条件时,该表达式或函数才应用于列表中的每个元素。它还可以嵌套来处理嵌套列表,并且比使用 map 和 filter 灵活得多。

# Syntax of list comprehension

[ expression(x) for x in aList if optional_condition(x) ]

print(list(map(add_func, aList)))

print([x ** 2 for x in aList])

# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]


print(list(filter(is_odd, aList)))

print([x for x in aList if x%2 == 1])

# [1, 3, 5, 7, 9]

# [1, 3, 5, 7, 9]

2.列表循环

Python 允许使用负索引,其中 Altruts [-1]== Altrue[LeN(Listor)-1 ]。因此,我们可以通过调用 a list[-2] 等获得列表中的倒数第二个元素。

我们还可以使用语法 aList[start:end:step] 对列表进行切片,其中包含起始元素,但不包含结束元素。因此,aList[2:5] 的结果是 [2,3,4]。我们也可以通过调用 a list[::-1] 来反转列表,我发现这种技术非常优雅。

Martin Shreder 发表在 Unsplash 杂志上的照片

列表也可以分解成单独的元素,或者使用星号将元素和子列表混合。

a, b, c, d = aList[0:4]

print(f"a = {a}, b = {b}, c = {c}, d = {d}")

# a = 0, b = 1, c = 2, d = 3


a, *b, c, d = aList

print(f"a = {a}, b = {b}, c = {c}, d = {d}")

# a = 0, b = [1, 2, 3, 4, 5, 6, 7], c = 8, d = 9

3.压缩和枚举:for 循环

Zip 函数创建一个迭代器,该迭代器聚合来自多个列表的元素。它允许在 for 循环中并行遍历列表并并行排序。它可以用星号来解压缩。

numList = [0, 1, 2]

engList = ["zero", "one", "two"]

espList = ["cero", "uno", "dos"]

print(list(zip(numList, engList, espList)))

# [(0, "zero", "cero"), (1, "one", "uno"), (2, "two", "dos")]


for num, eng, esp in zip(numList, engList, espList):

print(f"{num} is {eng} in English and {esp} in Spanish.")

# 0 is zero in English and cero in Spanish.

# 1 is one in English and uno in Spanish.

# 2 is two in English and dos in Spanish.

Eng = list(zip(engList, espList, numList))

Eng.sort # sort by engList

a, b, c = zip(*Eng)


print(a)

print(b)

print(c)

# ("one", "two", "zero")

# ("uno", "dos", "cero")

# (1, 2, 0)

Erol Ahmed 发表在 Unsplash 杂志上的照片

枚举一开始可能看起来有点吓人,但在许多情况下它是非常方便的。它是一个经常在 for 循环中使用的自动计数器,不需要在 for 循环中创建和初始化计数器变量 by counter=0 和 counter+=1。枚举和 zip 是构造 for 循环时最强大的两个工具。

upperCase = ["A", "B", "C", "D", "E", "F"]

lowerCase = ["a", "b", "c", "d", "e", "f"]

for i, (upper, lower) in enumerate(zip(upperCase, lowerCase), 1):

print(f"{i}: {upper} and {lower}.")

# 1: A and a.

# 2: B and b.

# 3: C and c.

# 4: D and d.

# 5: E and e.

# 6: F and f.

4.生成器:内存效率

当我们打算对大量数据进行计算,但希望避免同时分配所有结果所需的内存时,会使用生成器。换句话说,它们会动态生成值,而不会将以前的值存储在内存中,因此我们只能对它们进行一次迭代。

它们通常用于读取大文件或使用关键字 yield 生成无限序列。我经常发现它在我的大多数数据科学项目中很有用。

def gen(n): # an infinite sequence generator that generates integers >= n

while True:

yield n

n += 1


G = gen(3) # starts at 3

print(next(G)) # 3

print(next(G)) # 4

print(next(G)) # 5

print(next(G)) # 6

5.虚拟环境:isolation

如果你读完本文中只记得其中一条,那么应该是虚拟环境的使用。

Matthew Kwong 发布在 Unsplash 上的照片

Python 应用程序通常使用很多不同的包,这些包来不同的开发人员,具有复杂的依赖关系。不同的应用程序是使用特定的库设置开发的,其中的结果不能使用其他库版本复制。不存在一次安装就满足所有应用要求的情况。

conda create -n venv pip python=3.7 # select python version

source activate venv

...

source deactivate

因此,为每个应用程序创建独立的独立虚拟环境 venv 是非常重要的,这可以使用 pip 或 conda 来完成。

参考文章:

Visualizing Bike Mobility in London using Interactive Maps and Animations

via:https://towardsdatascience.com/5-python-features-i-wish-i-had-known-earlier-bc16e4a13bf4

雷锋网雷锋网雷锋网

相关资讯

GitHub标星2.6万!Python算法新手入门大全

问耕 发自 凹非寺量子位 出品 | 公众号 QbitAI今天推荐一个Python学习的干货。几个印度小哥,在GitHub上建了一个各种Python算法的新手入门大全,现在标星已经超过2.6万。这个项目主要包括两部分内容:一是各种算法的基本原

2021年全年:苹果iPhone的销量约为2.39亿部

研究公司Gartner表示,5G带来了对iPhone的强劲需求,让苹果在2021年底成为全球最大的智能手机销售商。2021年上半年,由于冠状病毒的影响,智能手机销量在经历了2020年的下滑后开始复苏。Gartner的Anshul Gupta

目前公认值得买的三款iPhone,少纠结性价比和参数,体验最重要

如今iPhone的价格正在逐年下滑,尽管相比安卓旗舰依旧高出不少,但对于整个手机市场而言,每降低几百元就能吸纳不少用户,而回顾目前还可以买到的iPhone机型,下面这三款应该是公认最值得的选择了,不用纠结它们的性价比和参数,体验好才是最重要

专为苹果用户准备的,这三款iPhone手机才是“经典中的经典”

苹果手机也不能随便买!有些外行的朋友们,觉得说苹果差不多一年只更新迭代一次高端旗舰,没有中低端产品搅局,每款iPhone应该都是精华。其实不然,这三款iPhone才是“经典中的经典”,专为苹果用户准备!第一款:iPhone 11iPhone

「多图」八款iPhone详细规格参数对比你会买哪款?

你的钱准备好了吗?2018年款iPhone已经正式登场,在未来1年中你会挑选哪款iPhone陪伴你呢?如果目前已经拥有iPhone X是否有必要升级iPhone XS Max?现在是购买iPhone 7或者7 Plus的最佳时机?带着这些疑

新机又来,历代iPhone回顾

苹果一年一度的手机发布会9月9日就亮相了,在我的印象里,自从iPhone4代开始,每一代的iPhone都会成为一代街机,当然这里的街机不是贬义词,因为无论是从外观,还是实用性还是逼格,iPhone都能满足。总觉得在中国,无论是月薪2000还

抢不到首批iPhone12?店里试玩后,我觉得这次能大卖

了解更多热门资讯、玩机技巧、数码评测、科普深扒,点击右上角关注我们----------------------------------盼望着盼望着,23号到了,iPhone 12的脚步近了。不瞎闹了,今天是iPhone 12和iPhone

历代iPhone产品大盘点变革创新的集大成者

一年一度的苹果新品发布会即将到来,2017年苹果发布了十周年之作——iPhone X,智能手机行业的全面屏之战便一发不可收拾。走进2018,我们来到了iPhone的第十一年。回首iPhone走来的每一步,就像是一款纯净的玉石被能工巧匠精心雕

友情链接

SEO域名抢注宝宝起名网妈妈知道币圈康佳冰箱评测网抽油烟机品牌网CoCo都可优惠券办公文具品牌网美甲培训学习网三星电视评测网网球运动网梅里雪山旅游网生肖鸡运势网宜春今日新闻网东方生物股票废旧物资回收网西安旅游攻略网元宇宙资讯网安踏体育港股
python编程教学网-python数据库开发教程、python基础知识入门、python数据库编程入门、python语法基础、python下载安装教程、python下载手机版、python翻译器下载手机版、python翻译器代码、python语言翻译、python基础代码、python编程自学网。
python编程教学网 dadeji.cn ©2022-2028版权所有