Python虽然好用,但用好真的很难。尤其是函数部分,只要写不好,后面的一连串人都会遭殃。看又看不懂,测试起来也麻烦,维护又维护不动,真是让人头疼。

那怎么写好一个Python函数呢?《Writing Idiomatic Python》一书的作者在 Medium 上发表了一篇文章,给出了6个建议。希望能够给你带来帮助。

1、怎样算是好函数?

“好”的Python函数和“差”的Python函数之间有什么差别呢?每个人都有自己的理解。基于我的理解,如果一个Python函数能够符合下面的大部分条件,我会认为它是一个“好”函数:

  • 命名合理

  • 单一功能

  • 包括文档字符串

  • 返回一个值

  • 不超过50行

  • 是幂等函数或纯函数

对许多人来说,这些要求可能显得过于苛刻了。

不过,我保证,如果你的函数遵循这些规则,你的代码会非常漂亮,会让其他的程序员都“馋哭”的。

下面,我将一一讨论这些规则,然后总结它们是如何创造“好”函数的。

2、注意命名

在这个问题上,我最喜欢的一句话是:

计算机科学中只有两件事很让人头疼:缓存失效和命名。

尽管这听起来很莫名其妙,但给一个事情命名太难了。下面是一个反面案例:

def getknn(from_df):

原文中这个代码没有放上去,我们根据上下文信息进行了补充。

这个函数命名的第一个问题是它使用了缩写。

对于那些并不出名的缩略词来说,使用完整的英语单词会更好。缩写单词的唯一原因是为了节省打字时间,但是每个现代编辑器都有自动填充功能,所以你只需要键入一次全名就可以了。

缩写通常是特定领域的。在上面的代码中,KNN 指的是“K-Nearest Neighbors”,df 指的是“DataFrame”,这是一个数据结构。如果另一个不熟悉这些首字母缩写的程序员正在阅读代码,几乎很难看懂。

关于这个函数的名字还有另外两个小瑕疵:

  • “get”这个词是无关紧要的。对于大多数命名比较好的函数来说,很明显有一些东西会从函数中返回,它的名字将反映这一点。
  • from_df 也不是必要的。如果没有明确的参数名称,函数的文档字符串或类型注释会描述参数的类型。

那么我们如何重命名这个函数呢?很简单:

def k_nearest_neighbors(dataframe):

即使是外行,这个函数要计算的

怎么写好一个Python函数?给你6个建议相关推荐

  1. python函数的组成要素_写好一个Python函数的六要素

    Python 虽然好用,但用好真的很难.尤其是函数部分,只要写不好,后面的一连串人都会遭殃.看又看不懂,测试起来也麻烦,维护又维护不动,真是让人头疼. 那怎么写好一个 Python 函数呢?<W ...

  2. python 函数前有一个下划线_【Python】怎么写好一个 Python 函数?

    1. 命名 符合 PEP-8 函数命名书写规范的是小写+下划线或者比较常用的驼峰命名法.内容方面是动宾结合. 举个例子: def setUserName(String userName):pass 推 ...

  3. 我写了一个Python小项目

    最近我写了一个 Python 练手小项目,它是一个 PC 桌面版的便签程序,很简陋.写这个小项目是为了熟悉一下用 Python 进行一个完整的项目开发,进一步熟练 Python 的使用. 界面是这样的 ...

  4. 写一个python函数 用cuda加速

    好的,下面是一个用 CUDA 加速的 Python 函数的示例: import numpy as np import cupy as cpdef accelerate_with_cuda(x, y): ...

  5. 下面是一个python函数、哪个说法不正确_2017秋python语言程序设计(北京信息科技大学)答案...

    [单选题]以下可以终结一个循环的执行的语句是 [单选题]设计的组件之间的依赖关系图被称为: [单选题]类方法中定义了四个参数,这种情况下实际上有多少参数: [判断题]螺旋式开发可以简化项目管理,能够适 ...

  6. python包裹 函数_什么是最干净的方法调用一个Python函数从C++与一个Sigg包裹的Obj....

    下面是我解决这个问题的工作方案.它使用了上述"无所不能"和"柔印"的建议. 特别是,我们用SWIG director创建一个回调类,然后在Python中从中派生 ...

  7. 领导给我一堆无序、杂乱的数据,我写了一个Python自动化脚本!

    问题抽丝剥茧 这个问题也算是群友答疑.如果说同事或者老板给你一堆这样的数据,你估计会抓狂,该怎么处理呢? 仔细观察上面数据可以发现,该数据有如下2个主要特点: ① 每一行的数据长度不同.第一行和第三行 ...

  8. python统计大小写字母个数_编写一个Python函数,它接受一个字符串并计算大写字母和小写字母的数量...

    问题why this one doesn't work? 除了语法错误和运行时错误之外,您的代码逻辑还有很长的路要走.你实际上没有按问题所问的去做.您似乎正在尝试计算单个字符中的大写字符数.那是不正确 ...

  9. python自动化脚本编写教程_开发工具pycharm写第一个Python自动化程序案例|python基础教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. ...

  10. python 从字符串中随机选取4个字符_我需要一个Python函数,当给定字符的期望概率时,它将输出4个不同字符的随机字符串...

    对于四封信,我脑海中闪过的是:from random import random def randABCD(n, pA, pB, pC, pD): # assumes pA + pB + pC + p ...

最新文章

  1. 浏览器下载附件Content-Disposition
  2. 极客大赛助力BCH应用开发
  3. 梅原对justin wang 真人版
  4. 控制台异常:Could not connection
  5. java repaint 无效_java repaint()无效
  6. Custom Components 翻译
  7. PL/SQL批处理语句(BULK COLLECT子句和FORALL语句)
  8. java持久化框架对比_四种流行的持久化框架比较
  9. 决策树ID3算法实现与讨论(完整代码与数据)
  10. mongodb时间差8小时,原因及解决方案
  11. 记一次尴尬的经历---硅胶干燥剂颗粒堵住了耳机孔
  12. Anaconda安装keras教程
  13. Win7 Iphone4手机通过电脑上网设置 开机自动打开WIFI
  14. 数据挖掘十大经典算法 整理
  15. redis限制set大小_redis set大小限制_微信文件大小限制
  16. JAVA - 变量作用域
  17. 硬件接口之RGB888(RGB24)
  18. 麻将牌技法--收藏慢慢学
  19. Linux JKD1.8 安装及配置
  20. ant design vue全局引用一直提示没有isMoment参数的问题

热门文章

  1. 深圳职业技术学院计算机录取分,2015深圳职业技术学院录取分数线
  2. Struts2+Spring3+Hibernate4+Maven+EasyUI 站点收藏
  3. Cesium 展示——风流场制作,制作风场可视化
  4. 使用asset catalog管理图片资源
  5. mpc_local_planner 源码部分和以及在kinetic下使用
  6. java+springmvc+vues sm450网上办公自动化系统#毕业设计
  7. mysql存储过程 2000工资加200_我打工 一个月工资2000元。 1800+200的全勤。老板压了1000元。刚开...
  8. 原生Camera预览分辨率自定义修改
  9. pytorch实用工具:torchsummary、torchsnooper
  10. 【SQL解惑】谜题21:飞机与飞行员