《Effective Python 编写高质量Python代码的59个有效方法》学习笔记2

这篇具有很好参考价值的文章主要介绍了《Effective Python 编写高质量Python代码的59个有效方法》学习笔记2。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

尽量用enumerate取代range

#当需要循环的是数值时可以使用range()
for x in range(10):
    pass
#或者获取列表元素时可直接迭代
food = ['apple','egg','rice']
for x in food:
    pass

#而当需要元素所在索引时,一般我们用
for x in range(len(food)):
    pass

#这样很生硬

'''
Python内置函数enumerate()可把各种迭代器(包括各种序列及各种支持迭代的对象)包装为生成器
每次产生一对输出值,前者表示循环下标,后者表示从迭代器中获取到的下一个序列元素
同时可以有第二个参数,指明开始计数的索引值,默认为0
'''

for i,food in enumerate(food):
    print i,food
#输出
#0 apple
#1 egg
#2 rice

for i,food in enumerate(food,2):
    print i,food
#输出
#2 apple
#3 egg
#4 rice

用zip()同时遍历两个迭代器

names = ['tom','jack','jy']
letters = [len(n) for n in names] #注意这里列表推导用法

#要获取最长的名字及其长度多少
longest_name = None
max_letter = 0

#常规做法 、看上去比较混乱 不易阅读
for i in range(len(names)):
    count = letters[i]
    if count > max_letter:
        longest_name = names[i]
        max_letter = count

#使用zip
for name,count in zip(names,letters):
    if count > max_letter:
        longest_name =name
        max_letter = count

'''
当遍历的两个迭代器长度不同时,会在最短的那里停止
python3中zip相当于生成器,会在遍历时逐次产生元组
'''

合理使用try-except-else-finally

如果既要异常向上传播,又要在异常发生时执行清理工作,可使用try/finally结构
try/except/else结构可以清晰描述哪些异常由自己的代码处理,哪些传播到上一级
无论try块是否异常,都可用try/finally复合语句的finall块执行清理工作
else块可缩减try中代码量,并把没有异常时要执行的语句与try/except隔离开
顺利运行try后,若想使某些操作能在finally块的清理代码之前执行,则可将这些操作写到else块中

使用异常表示特殊情况而不要返回None

用None作返回值来表示特殊意义的函数,很容易使调用者犯错,因为None和0及空字符串之类的值,在条件表达式中都会被评估为False。
函数在遇到特殊情况时,应该抛出异常,而不要返回None.调用者在看到该函数的文档中所描述的异常后,应该就会编写相应的代码来处理了。文章来源地址https://www.toymoban.com/news/detail-424840.html

闭包里使用外围作用域中的变量

#对list排序,但是要把出现在某个列表中的数字排在其他数字之前


def sort_priority(values,group):
    def helper(x):
        if x in group:
            return (0,x)
        return (1,x)
    values.sort(key=helper)

numbers = [8,3,1,2,5]
group = {2,3,5}
sort_priority(numbers,group)
print(numbers)
#>>[2, 3, 5, 1, 8]
'''
python支持闭包(closure):闭包是一种定义在某个作用域中的函数,它引用了那个作用域里的变量。
helper之所以能访问sort_priority的group参数,原因在于它是闭包
python函数是一级对象,即可直接引用函数、把函数赋给变量、把函数当成参数传给其他参数,并通过表达式及if语句对其进行比较和判断。
所以这里可以把helper这个闭包函数传给sort的key参数
python使用特殊的规则比较两个元组。首先比较各元组中下标为0的对应元素,如果相等,再比较下标为1 的对应元素...以此类推
'''

##########获取闭包内的数据
###【python3】###
#nonlocal语句的意思是在给相关变量赋值时应在上层作用域中查找该变量 / 唯一限制在于不能延伸到模块级别,防止污染全局作用域
#与global相对
def sort_priority3(numbers,group):
    found = False
    def helper(x):
        nonlocal found
        if x in group:
            found = True  #表示是否出现了优先级更高的元素。使函数调用者能够做出相应处理
            return (0,x)
        return (1,x)
    numbers.sort(key=helper)
    return found
    #为了防止滥用,只推荐在很简单的函数里使用nonlocal

#新浪面试题
li = [lambda :x for x in range(10)]
print(type(li))
print(type(li[0]))
# <class 'list'>
# <class 'function'>

res = li[0]()
print(res)
#输出:9
#函数在没有执行前,内部代码不执行
#因为x最后循环成了9,所以每一个return x出来的值都是9
'''
Python中是没有块级作用域的,代码块里的变量,外部可以调用;
即使执行了一下函数,name的作用域也只是在函数内部,外部依然无法进行调用
'''
##【关于函数名】##
'''
假如定义了函数f1()
那么访问f1(),就会得到f1()中的返回值
访问f1,就会得到f1函数的内存地址
'''

到了这里,关于《Effective Python 编写高质量Python代码的59个有效方法》学习笔记2的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何写出高质量的代码

    你是否曾经为自己写的代码而感到懊恼?你是否想过如何才能写出高质量代码?那就不要错过这个话题!在这里,我们可以讨论什么是高质量代码,如何写出高质量代码等问题。无论你是初学者还是资深开发人员,都可以在这个话题下进行分享,汲取灵感和知识,共同提高自

    2023年04月25日
    浏览(108)
  • 代码优美,搬砖不累:探索高质量代码之路

    写出高质量代码是每个程序员的追求,也是提高自己编程能力的必经之路。高质量的代码可以提高软件的可维护性、可读性、可扩展性和可移植性等,降低软件开发和维护的成本。本文将介绍一些如何写出高质量代码的实用技巧和方法。 可读性与可维护性 可读性指代码应该

    2024年02月02日
    浏览(46)
  • 程序员如何高质量重构代码?

    有道无术,术尚可求也,有术无道止于术。你好,我是程序员雪球,今天和你聊聊程序员重构代码那些事。   程序员重构代码的重要性不言而喻,但如何进行有效的重构呢?下面是一些建议和指导。 为什么要重构? 重构是提高代码质量和可维护性的重要手段,旨在在不改变

    2024年02月15日
    浏览(51)
  • Go语言——【高质量编程 | 代码规范】

    作者 :非妃是公主 专栏 :《Golang》 博客主页 :https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 高质量编程,就是指编写的代码能够达到正确可靠的同时,具备简洁清晰、结构明了等特点,可以让团队成员很快的上手。具体来说,有

    2024年02月01日
    浏览(65)
  • 袋鼠云代码检查服务,揭秘高质量代码背后的秘密

    质量是产品的生命线,代码检查是软件开发过程中至关重要的一环,它可以帮助我们发现并纠正潜在的错误,提高软件质量,降低维护成本。 在袋鼠云产品中也存在这个问题,由于离线数据开发人员 SQL 水平不一,导致代码书写混乱、SQL 代码运行问题较多。本文将介绍在离线

    2024年02月08日
    浏览(41)
  • 高质量病毒——暴风一号(BoyFine)代码.vbs

    最近我看到了一些很有趣的代码(主要是因为他是病毒),来,话不多说 直接上代码,希望对大家有帮助,此外,我要对它的名称进行说明,他的 中文名是暴风一号,英文名是BoyFine

    2024年02月11日
    浏览(36)
  • 你是否曾经为自己写的代码而感到懊恼?那如何才能写出高质量代码呢?

    写出高质量代码是每个程序员的追求,因为高质量的代码可以提高程序的可维护性、可扩展性和可读性,从而减少代码的bug和维护成本。 当你的代码写的不好的时候会产生各种各样的问题,可能会导致以下问题: 1.代码可读性差: 代码结构混乱、命名不规范、注释不清晰等

    2024年02月02日
    浏览(36)
  • 2022数学建模国赛B题和C题高质量论文代码数据

    目录 B题论文 5.1 问题一的建模与求解 5.1.1 使用极坐标求解具体位置 C题论文 1.1 研究背景 1.2 问题的提 5.1 问题一的建模与求解 5.1.1 数据的预处理 5.1.1 使用极坐标求解具体位置 假设圆周的半径为, .以无人机FY00为极点, 以FY00为端点且经过FY01的射线为极轴建立极坐标系.不失一般

    2024年02月17日
    浏览(30)
  • 基于Python的100+高质量爬虫开源项目(持续更新中)

    以下是项目所使用的框架,不同的项目所使用的框架或许有不同,但都万差不离: Scrapy:一个快速的高级Web爬虫框架,可用于从网站中提取结构化数据。 BeautifulSoup:一个用于从HTML和XML文件中提取数据的Python库。 PySpider:一个轻量级,跨平台并基于事件的Python爬虫框架。 T

    2024年01月16日
    浏览(47)
  • 小破站有许多“高质量”东西,怀揣着“学习”的目的,我用Python将它们通通采集下来

    前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 事情是这样的,昨晚室友拉着我去他的电脑,说带我欣赏一点高雅的作品~ 于是这一坐下,便是一晚上… 作为一个乐于分享的博主,本来我是决定直接分享的, 但是转念一想:有句俗话不是说授人以鱼不如授人以渔, 我还是

    2024年02月07日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包