提升Python编码能力的3个重要概念

目录
  • 1. 引言
  • 2. 上下文管理器
  • 3. 类型提示
  • 4. 浅拷贝和深拷贝
  • 5. 总结

1. 引言

Python 是由Guido Van Rossum 于 1991 年创建的一种编程语言。在过去的几年里,越来越多的公司开始使用 Python 进行项目开发,主要是因为它语法简单,有很多方便使用的第三方库。本文主要对Python中一些概念进行抽象总结,理解并使用它们可以极大地提升大家的编码能力。

2. 上下文管理器

上下文管理器允许我们以最佳方式分配和释放上下文的资源。对于某些资源的管理上,如果处理不当,可能会产生一些非常奇怪的现象,让人摸不着头脑。上下文管理器可以确保资源在使用完毕后正常释放。
一般来说,我们主要通过使用 with 关键字来使用它。使用上下文管理器最常见的情形是操作文件。对文件执行操作后,需要将其正确关闭,上下文管理器可以通过跳过具体细节来轻松地为我们完成相应的操作,

举例如下:

with open('myfile.xtx', 'r') as f:
    content = f.read()

观察上述代码,我们并没有显示调用 f.close() 方法。上下文管理器会自动为我们处理文件关闭的操作。

3. 类型提示

类型提示可以帮助我们能够编写干净、可解释性强的代码。应用它的方式是“注明”参数的类型和函数的返回值。例如,我们要验证用户的文本输入始终是整数。为此,我们编写了一个函数,该函数根据我们的验证返回 True False

def validate_integer(user_input):
    ...

既然我们知道 了这个函数的作用,那么通过查看定义就很容易理解了。但是,如果没有上面的描述,只看上述函数的声明,想要弄懂它并不是那么容易。 user_input 参数的类型是什么?它从何而来?它已经是一个整数了吗?通过将代码重构为以下形式,我们可以通过声明来回答这些问题:

def validate_integer(user_input: str) -> bool:
    ...

我们观察上述函数的声明,就非常容易解释了,即使是第一次读到这段代码的人。

4. 浅拷贝和深拷贝

对于新入门的研发人员来说,这是一个经常弄错的概念。我们来看个例子,假设我们创建了一个列表 a,然后将此列表分配给一个新变量b:

>>> a = [1, 2, 3]
>>> b = a

接着,我们尝试在列表b中插入一个新值,然后打印两个列表:

>>> b.append(4)
>>> print(b)
[1, 2, 3, 4]
>>> print(a)
[1, 2, 3, 4]

很多人会觉得奇怪,因为新值已插入到两个列表中!发生这种情况主要是因为在 Python中分配列表时,除非另有说明,否则不会复制列表。上述列表b只是列表a的引用,属于浅拷贝。

上述样例的图示解释如下:

上述图例意味着两个变量中的操作将反映到同一个列表中。如果我们确实相应生成列表a的副本,此时我们需要用到深拷贝,即使用.copy()方法进行相关操作:

>>> a = [1, 2, 3]
>>> b = a.copy()
>>> b.append(4)
>>> print(b)
[1, 2, 3, 4]
>>> print(a)
[1, 2, 3]

5. 总结

本文重点讲述了一些可以提升Python开发人员编码能力的概念和个人见解,希望大家可以从中学到相关技巧。当然,像任何编程语言一样,还是建议大家多动手,做的熟能生巧。

到此这篇关于提升Python编码能力的3个重要概念的文章就介绍到这了,更多相关提升Python编码能力概念内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python编程通过懒属性提升性能

    目录 为什么需要懒加载 如何使用懒加载 最后的话 懒加载是一种编程范式,它推迟加载操作,直到不得不这样做.通常,当操作开销很大,需要耗费大量时间或空间时,惰性求值是首选实现.例如,在 Python 中,涉及惰性求值的最著名技术之一是生成器.生成器不是为迭代创建整个序列,而是懒惰地一次生成一个元素. 在 Python 世界之外,许多其他面向对象的编程语言,例如 Swift 和 Kotlin,都具有与对象相关的惰性求值.具体来说,你可以指定自定义实例对象的特定属性是惰性的,这意味着在显式访问这些属性

  • 提升Python运行速度的5个小技巧

    目录 1. 选择合适的数据结构 2. 善用强大的内置函数和第三方库 3. 少用循环 4. 避免循环重复计算 5. 少用内存.少用全局变量 总结 官方原文,代码均可运行 Python 是世界上使用最广泛的编程语言之一.它是一种解释型高级通用编程语言,具有广泛的用途,几乎可以将其用于所有事物.其以简单的语法.优雅的代码和丰富的第三方库而闻名.python除了有很多优点外,但在速度上还有一个非常大的缺点. 虽然Python代码运行缓慢,但可以通过下面分享的5个小技巧提升Python运行速度! 首先,定

  • python 性能提升的几种方法

    关于python 性能提升的一些方案. 一.函数调用优化(空间跨度,避免访问内存) 程序的优化核心点在于尽量减少操作跨度,包括代码执行时间上的跨度以及内存中空间跨度. 1.大数据求和,使用sum a = range(100000) %timeit -n 10 sum(a) 10 loops, best of 3: 3.15 ms per loop %%timeit ...: s = 0 ...: for i in a: ...: s += i ...: 100 loops, best of 3:

  • 提升 Python 代码运行速度的6个技巧

    其实,Python 比我们想象的运行的要快.我们之所以有先入为主的认为Python运行慢,可能是我们平常的误用和缺乏使用技巧知识. 接下来让我们看看如何用一些简单的Trick来提高我们程序的运行性能 1.使用内置函数 Python中的许多内置函数都是用C实现的,并且经过了很好的优化.因此,如果熟悉这些内置函数,就可以提高Python代码的性能.一些常用的内置函数有sum().len().map().max()等. 假设我们有一个包含单词的列表,我们希望每个单词的首字母均变为大写.此时使用map(

  • python如何提升爬虫效率

    单线程+多任务异步协程 协程 在函数(特殊函数)定义的时候,使用async修饰,函数调用后,内部语句不会立即执行,而是会返回一个协程对象 任务对象 任务对象=高级的协程对象(进一步封装)=特殊的函数 任务对象必须要注册到时间循环对象中 给任务对象绑定回调:爬虫的数据解析中 事件循环 当做是一个装载任务对象的容器 当启动事件循环对象的时候,存储在内的任务对象会异步执行 特殊函数内部不能写不支持异步请求的模块,如time,requests...否则虽然不报错但实现不了异步 time.sleep --

  • 提升Python编码能力的3个重要概念

    目录 1. 引言 2. 上下文管理器 3. 类型提示 4. 浅拷贝和深拷贝 5. 总结 1. 引言 Python 是由Guido Van Rossum 于 1991 年创建的一种编程语言.在过去的几年里,越来越多的公司开始使用 Python 进行项目开发,主要是因为它语法简单,有很多方便使用的第三方库.本文主要对Python中一些概念进行抽象总结,理解并使用它们可以极大地提升大家的编码能力. 2. 上下文管理器 上下文管理器允许我们以最佳方式分配和释放上下文的资源.对于某些资源的管理上,如果处理

  • Python 编码处理-str与Unicode的区别

    一篇关于STR和UNICODE的好文章 整理下python编码相关的内容 注意: 以下讨论为Python2.x版本, Py3k的待尝试 开始 用python处理中文时,读取文件或消息,http参数等等 一运行,发现乱码(字符串处理,读写文件,print) 然后,大多数人的做法是,调用encode/decode进行调试,并没有明确思考为何出现乱码 所以调试时最常出现的错误 错误1 Traceback (most recent call last): File "<stdin>"

  • Python编码类型转换方法详解

    本文实例讲述了Python编码类型转换方法.分享给大家供大家参考,具体如下: 1:Python和unicode 为了正确处理多语言文本,Python在2.0版后引入了Unicode字符串. 2:python中的print 虽然python内部需要将文本编码转换为unicode编码来处理,而终端显示工作则由传统的Python字符串完成(实际上,Python的print语句根本无法打印出双字节的Unicode编码字符). python的print会对输出的unicode编码(对其它非unicode编

  • Python编码爬坑指南(必看)

    自己最近有在学习python,这实在是一门非常短小精悍的语言,很喜欢这种语言精悍背后又有强大函数库支撑的语言.可是刚接触不久就遇到了让人头疼的关于编码的问题,在网上查了很多资料现在在这里做一番总结,权当一个记录也为后来的兄弟姐妹们服务,如果可以让您少走一些弯路本人将倍感荣幸. 先来描述下现象吧: import os for i in os.listdir("E:\Torchlight II"): print i 代码很简单我们使用os的listdir函数遍历了E:\Torchlight

  • python编码总结(编码类型、格式、转码)

    本文详细总结了python编码.分享给大家供大家参考,具体如下: [所谓unicode] unicode是一种类似于符号集的抽象编码,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储.也就是它只是一种内部表示,不能直接保存.所以存储时需要规定一种存储形式,比如utf-8和utf-16等.理论上unicode是一种能够容纳全世界所有语言文字的编码方案.(其他编码格式不再多说) [所谓GB码] GB就是"国标"的意思,即:中华人民共和国国家标准.GB码是面向汉字的编码,包括

  • 学习python处理python编码问题

    概括.从python1.6开始就可以处理unicode字符了. 一.几种常见的编码格式. 1.1.ascii,用1个字节表示. 1.2.UTF-8,用1个至三个字节表示,表示ascii码时只占用1个字节,ascii编码是UTF-8的子集. 1.3.UTF-16,用2个字节表示,在python中,unicode的含义就是UTF-16. 二.python源文件的编码与解码,我们写的python程序从产生到执行的过程如下: 编辑器---->源代码---->解释器---->输出结果 2.1.编辑

  • Python 编码规范(Google Python Style Guide)

    Python 风格规范(Google) 本项目并非 Google 官方项目, 而是由国内程序员凭热情创建和维护. 如果你关注的是 Google 官方英文版, 请移步 Google Style Guide 以下代码中 Yes 表示推荐,No 表示不推荐. 分号 不要在行尾加分号, 也不要用分号将两条命令放在同一行. 行长度 每行不超过80个字符 以下情况除外: 长的导入模块语句 注释里的URL 不要使用反斜杠连接行. Python会将 圆括号, 中括号和花括号中的行隐式的连接起来 , 你可以利用这

  • python 编码规范整理

    一 代码编排 1 缩进4个空格的缩进(编辑器都可以完成此功能),不要使用Tap,更不能混合使用Tap和空格. 2 每行最大长度79,换行可以使用反斜杠,最好使用圆括号.换行点要在操作符的后边敲回车. 3 类和top-level函数定义之间空两行:类中的方法定义之间空一行:函数内逻辑无关段落之间空一行:其他地方尽量不要再空行. 二 文档编排 1 模块内容的顺序:模块说明和docstring-import-globals&constants-其他定义.其中import部分,又按标准.三方和自己编写顺

  • 提升Python效率之使用循环机制代替递归函数

    斐波那契数列 当年,典型的递归题目,斐波那契数列还记得吗? def fib(n): if n==1 or n==2: return 1 else: return fib(n-1)+fib(n-2) 当然, 为了程序健壮性,加上 try...except... def fib(n): if isinstance(n, int): print('兄弟,输入正整数哈') return try: if n==1 or n==2: return 1 elif n <= 0: print('兄弟别输入0或负

  • 提升Python程序性能的7个习惯

    掌握一些技巧,可尽量提高Python程序性能,也可以避免不必要的资源浪费. 1.使用局部变量 尽量使用局部变量代替全局变量:便于维护,提高性能并节省内存. 使用局部变量替换模块名字空间中的变量,例如 ls = os.linesep.一方面可以提高程序性能,局部变量查找速度更快:另一方面可用简短标识符替代冗长的模块变量,提高可读性. 2.减少函数调用次数 对象类型判断时,采用isinstance()最优,采用对象类型身份(id())次之,采用对象值(type())比较最次. 判断变量num是否为整

随机推荐