Python

Python开发

Python语言

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

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

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

很多人学习python,不知道从何学起。

很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。

很多已经做案例的人,却不知道如何去学习更加高深的知识。

那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!

QQ群:1097524789

即使你是一个从其他语言(如 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 来完成。

内容来源于网络,如有侵权请联系客服删除

python版本越高越好吗-5个Python特性 越早知道越好的相关推荐

  1. python以运行效率高著称吗_如何提高python的运行效率

    展开全部 窍门一:关键代码使用外部功能包 Python简化了许多编程任务,但是32313133353236313431303231363533e78988e69d8331333363393566对于一 ...

  2. 同一个电脑可安装多个python版本吗_Linux下如何安装多个Python版本

    原标题:Linux下如何安装多个Python版本 导读服务器上的Python版本太老了,需要安装一个新的Python版本,才能跑我的代码.因为环境的需要,但是又不能卸载老的版本,所以安装一个新的,使用 ...

  3. anaconda降级python失败_如何降级Python版本安装spyder?

    如何降级 Python 版本安装 Spyder? 可能并不需要降级 Python 版本,使用 Spyder 独立安装包安装,然后指定 Python 解释器:另外一种方法是在 Anaconda 中安装. ...

  4. artcam 9.0英文版本下载_Win10安装paddlepaddle-gpu的python版本

    鉴于楼主知识水平有限,我的教程针对有限情况下的电脑 在阅读此篇文章之前,请确认 Windows10系统且为64位 显卡为Nvidia 显卡 本篇文章参考了 飞桨PaddlePaddle-源于产业实践的 ...

  5. 如何检查正在运行脚本的Python版本?

    如何检查正在解释脚本的版本的Python Interpreter? #1楼 sys模块的sys.version字符串中提供了此信息: >>> import sys 可读性: > ...

  6. Python版本与Matlab版本的对应关系

    1.python版本与matlab版本的对应关系     在python中要调用matlab代码时,需要注意python版本和matlab版本的对应关系,如果python版本过高,是无法成功的调用相应 ...

  7. PyQt PySide版本与Python版本选择

    (经过验证如果要用matplotlib则不建议安装pyside6.4版本,6.3.2版本测试嵌入matplotlib成功 python版本3.8 3.9测试ok,3.10未测试) PyQt最新版本信息 ...

  8. python搭建自动化测试平台_AutoMagic 开源自动化测试平台搭建之修改默认python版本

    一.下载 automagic 源码到本地 python3.6 Django 3.0.2框架 二.这里我使用的是Centos7 虚拟环境 安装autoMagic 需要python 环境,而centos7 ...

  9. ubuntu升级python_ubuntu升级python版本

    运行发现错误: AttributeError: 'module' object has no attribute 'OrderedDict' google发现是因为python版本老了的原因(pyth ...

  10. linux 切换python版本_Linux下python默认版本切换成替代版本(示例代码)

    当你安装 Debian Linux 时,安装过程有可能同时为你提供多个可用的 Python 版本,因此系统中会存在多个 Python 的可执行二进制文件.你可以按照以下方法使用 ls 命令来查看你的系 ...

最新文章

  1. 推荐10款windows端实用软件,每一款都是精品!
  2. 【机器学习入门到精通系列】异常检测
  3. 微信小程序 setData动态设置数组中的数据
  4. mybatis中修改了数据,控制台显示成功,数据库没有修改
  5. 备战蓝桥杯—有边数限制的最短路 (bellman_ford+)——[AcWing]有边数限制的最短路
  6. css列表大全,CSS中li列表样式汇总大全,全实例展示
  7. 【Python】matplotlib.pyplot 常用技巧
  8. Oracle裁员补偿N+6,员工仍不满意,为何?
  9. Python训练自己的语音识别系统
  10. 喜迎二十大知识竞赛答题小程序源码
  11. GAN(生成对抗网络)的系统全面介绍(醍醐灌顶)
  12. Rufus——启动盘创建工具
  13. 计算机 ppt图标,史上最完整的通信计算机PPT图标及模版 (PPTshare).ppt
  14. Android APP登录界面
  15. VFIO代码分析(3)VFIO-PCI驱动2
  16. CEO修炼手册:识人、识人还是识人
  17. 一些WM消息与其相应WPARAM,LPARAM的定义
  18. Mac根目录下无法创建文件或目录-报错 mount_apfs: volume could not be mounted: Operation not permitted mount: / fail
  19. 自学Python九 爬虫实战二(美图福利)
  20. 你可能想象不到,手机号码标记居然也是一门月赚十万的好生意

热门文章

  1. 使用GAN进行异常检测——可以进行网络流量的自学习哇,哥哥,人家是半监督,无监督的话,还是要VAE,SAE。...
  2. 利用被入侵的路由器迈入内网——抓包,利用路由器漏洞入侵,进行流量劫持...
  3. lucene LZ4 会将doc存储在一个chunk里进行Lz4压缩 ES的_source便如此
  4. 设置IDEA中各种线条颜色
  5. Linux修改UTF8字符编码
  6. 前端之路从零开始——第二周第四天笔记(background)
  7. 转载--web前端工程化
  8. [再寄小读者之数学篇](2014-11-19 等差数列的部分和)
  9. java 重载 : 1.参数个数不同,2.参数类型不同
  10. vue项目中的tab页实现