Python中的函数具备多种特性,这可以简化编程工作。Python函数的某些性质与其他编程语言中的函数相似,但也有性质是Python独有的。本节将介绍如何用函数来表达亿图、提升可复用程度,并减少Bug

第十四条:尽量用异常来表示特殊情况,而不要返回None

第十五条:了解如何在闭包里使用外围作用域中的变量

第十六条:考虑用生成起来改成直接返回列表的函数

第十七条:在参数上面迭代时,要多加小心

第十八条:用数量可变的位置参数减少视觉杂讯

第十九条:用关键字参数来表达可选的行为

第二十条:用None和文档字符串来描述具有动态默认值的参数

第二十一条: 用只能以关键字形式的指定的参数来确保代码的明晰

第十四条:尽量用异常来表示特殊情况,而不要返回None

要点:

要点1:用None这个返回值来表示特殊意义的函数,很容易是使用者犯错,因为None和0及空字符串之类的值,在条件表达式里都会评估为False。

要点2:函数在遇到特殊情况时,应该抛出异常,而不要返回None。调用者看到该函数的文档中所描述的异常之后,应该就会编写响应的代码来处理他们了。

第十五条:了解如何在闭包里使用外围作用域中的变量

要点:

要点1:对于定义在某作用域内的闭包来说,它可以应用这些作用域中的变量。

要点2:使用默认方式对闭包内的变量赋值,不会影响外围作用域中的同名变量。

要点3:在Python3中,程序可以在闭包内用nonlocal语句来修饰某个名称,使该闭包能够修改外围作用域中的同名变量。

要点4:在Python2中,程序可以使用可变值(例如,包含单个元素的列表)来实现与nonlocal语句相仿的机制。

要点5:除了那种会叫简单的函数,尽量不要用nonlocal语句。

第十六条:考虑用生成起来改成直接返回列表的函数

要点:

要点1:使用生成器比把收集到的结果放入列表里返回给调用者更加清晰。

要点2:由生成器函数所返回的那个迭代器,可以把生成器函数体中,传给yied表达式的那些值,逐次产生出来。

要点3:无论输入量有多大,生成器都能产生一系列输出,因为这些输入量和输出量,都不会影响它在执行时所耗的内存。

第十七条:在参数上面迭代时,要多加小心

要点:

要点1:函数在输的参数上面多次迭代时要当心:如果参数是迭代器,那么可能会导致奇怪的行为并错失某些值。

要点2:Python的迭代器协议,描述了容器和迭代器应该如何与iter和next内置函数,for循环及相关表达式相互配合。

要点3:把__iter__方法实现为生成器,即可定义自己的容器类型。

要点4:想判断某个值是迭代器还是容器,可以拿该值为参数,两次调用iter函数,若结果相同,则是迭代器,调用内置的next函数,即可灵盖迭代器前进一步。

第十八条:用数量可变的位置参数减少视觉杂讯

要点:

要点1:在def语句中使用*args,即可令函数接收数量可变的位置参数。

要点2:调用函数时,可以采用*操作符,把序列中的元素方程位置参数,传给该函数。

要点3:对生成器使用*操作符,可能导致程序耗尽内存并崩溃。

要点4:在已经接受*args参数的函数上面继续添加位置参数,可能会产生难以排查的bug。

第十九条:用关键字参数来表达可选的行为

要点:

要点1:函数参数可以按位置或关键字来指定。

要点2:只使用位置参数来调用函数,可能会导致这些参数值的含义不够准确,而关键字参数则能够阐明每个参数的意图。

要点3:给函数添加新的新的行为时,可以使用带默认值的关键字参数,以便与原有的函数调用代码保持兼容。

要点4:可选的关键字参数,总是应该以关键字形式来指定,而不应该以位置参数的形式来指定。

第二十条:用None和文档字符串来描述具有动态默认值的参数

要点:

要点1:参数的默认值,只会在程序加载模块并读到本函数的定义时评估一次。对于{}或[]等动态的值,这可能会导致奇怪的行为。

要点2:对于以动态值作为实际默认值的关键字参数来说,应该把形式上的默认值写为None,并在函数的文档字符串里面描述该默认值所对应的实际行为。

第二十一条: 用只能以关键字形式的指定的参数来确保代码的明晰

要点:

要点1:关键字参数能够势函数调用的意图更加明确。

要点2:对于各参数之间很容易混淆的函数,可以声明只能以关键字形式指定的参数,以确保调用者必须通过关键字来指定它们。对于接受多个Boolean标志的函数,更应该这样做。

要点3:在编写函数时,Python3有明确的语法来定义这种只能以关键字的形式指定的参数。

要点4:Python2的函数可以接受**kwargs参数,并手工抛出TypeError异常,以便模拟只能以关键字形式来指定的参数。

如何编写python函数_编写高质量的Python代码系列(二)之函数相关推荐

  1. html空格代码_编写灵活、稳定、高质量的CSS代码的规范(推荐收藏)

    01 编写灵活.稳定.高质量的HTML代码的规范 一.唯一定律 无论有多少人共同参与同一项目,一定要确保每一行代码都像是唯一个人编写的. 二.HTML 2.1 语法 (1)用两个空格来代替制表符(ta ...

  2. 蛙蛙推荐:如何编写高质量的python程序

    蛙蛙推荐:如何编写高质量的python程序 蛙蛙推荐:如何编写高质量的python程序 - 蛙蛙王子 - 博客园 蛙蛙推荐:如何编写高质量的python程序 如何编写高质量的python程序 目录 代 ...

  3. ​如何编写高质量的C#代码(一)

    如何编写高质量的C#代码(一) 从"整洁代码"谈起 一千个读者,就有一千个哈姆雷特,代码质量也同样如此. 想必每一个对于代码有追求的开发者,对于"高质量"这个词 ...

  4. HTML Inspector – 帮助你编写高质量的 HTML 代码

    HTML Inspector 是一款代码质量检测工具,帮助你编写更优秀的 HTML 代码.HTML Inspector 使用 JavaScript 编写,运行在浏览器中,是最好的 HTML 代码检测工 ...

  5. python四大高阶函数_四大高阶函数

    目录 1. 匿名函数 在我们需要一个函数但又不想费神的去命名一个函数的场合下使用,这就是匿名函数 1 f = lambda x,y,z:x+y+z2 defF(x,y,z):3 return x+y+ ...

  6. 推荐8本高质量的Python书籍,初学者必看

    Python是一种多功能语言.它经常用作Web应用程序的脚本语言,嵌入到软件产品中,以及人工智能和系统任务管理.它既简单又强大,非常适合初学者和专业程序员. 今天,小千选择几本高质量的Python书籍 ...

  7. Python爬虫 | 爬取高质量小姐姐照片

    Python爬虫 | 爬取高质量小姐姐照片 1.数据来源分析 2.获取author_id_list和img_id 3.制作detial 4.制作detial_list 5.数据保存 6.批量获取 7. ...

  8. 老司机写的java代码_老司机告诉你高质量的Java代码是怎么练成的?

    一提起程序员,首先想到的一定是"码农",对,我们是高产量的优质"码农",我们拥有超跃常人的逻辑思维以及不走寻常路的分析.判别能力,当然,我们也有良好的编码规范, ...

  9. 高质量的工程代码为什么难写

    之所以想起写这篇文章,是因为最近看到的一个著名的开源项目在内部使用时的各种问题,不得不说,很多的开源的东西思想是不错的,但离真正工程化都有不小的距离,所以没什么商业公司采用的开源产品如果要引入的话一定 ...

最新文章

  1. 阿里转衰!百度没落!字节跳动崛起!未来的互联网是腾讯和字节跳动的世界!这样的言论你相信吗?...
  2. SAP PM单一和复合角色
  3. 【svn】svn报错:“Previous operation has not finished; run ‘cleanup‘ if it was interrupted“ 的解决方法
  4. 如何用android studio测试用例,Android Studio上使用Appium创建测试用例基本步骤
  5. 03.Python基础--控制流语句-顺序结构-判断结构-循环语句
  6. MySQL8的inodb参数设置_MySQL8.0自适应参数innodb_dedicated_server
  7. python二维数组遍历输出每行最大值_如何在二维数组中找到每行的最大值?
  8. apk当安装程序将文件复制到手机自带的指定文件夹
  9. Pytorch——Variable是什么?
  10. FFmpeg架构之I/O模块分析
  11. PDFlib使用(c++)
  12. 2022年技术人365天写作手册-day02
  13. bochs运行xp_bochs模拟器xp系统镜像安装教程及注意事项
  14. UNI-APP实现扫描二维码
  15. Open Drain vs Push Pull
  16. Android系统篇(一)——建立Android系统开发环境
  17. 【行业云说直播间】-智慧能源 低碳未来正式上线
  18. 画布渐变以及svg图形
  19. 社区的网络舆情信息监测具体实施方案
  20. 最全收集整理GitHub上受欢迎的Android UI Library

热门文章

  1. Power BI_柱状图中间空一列_横坐标显示
  2. Unity批量刷草工具及优化
  3. Python爬虫进阶之爬取篮球赛数据
  4. 电脑重装系统引导方式不是BIOS 不能引导MBR磁盘怎么办
  5. UEBA案例分析系列之数据泄露检测
  6. java实现-现奔跑吧小恐龙-小游戏
  7. Java代码关于TIFF/TIF图片转PNG
  8. 这三个移动互联网案例让你大胆追梦
  9. 可道云kodexplorer修改小记
  10. 赛尔号和赛尔机器人_与赛尔号机器人同乐作文600字