怎么写好一个Python函数?给你6个建议
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个建议相关推荐
- python函数的组成要素_写好一个Python函数的六要素
Python 虽然好用,但用好真的很难.尤其是函数部分,只要写不好,后面的一连串人都会遭殃.看又看不懂,测试起来也麻烦,维护又维护不动,真是让人头疼. 那怎么写好一个 Python 函数呢?<W ...
- python 函数前有一个下划线_【Python】怎么写好一个 Python 函数?
1. 命名 符合 PEP-8 函数命名书写规范的是小写+下划线或者比较常用的驼峰命名法.内容方面是动宾结合. 举个例子: def setUserName(String userName):pass 推 ...
- 我写了一个Python小项目
最近我写了一个 Python 练手小项目,它是一个 PC 桌面版的便签程序,很简陋.写这个小项目是为了熟悉一下用 Python 进行一个完整的项目开发,进一步熟练 Python 的使用. 界面是这样的 ...
- 写一个python函数 用cuda加速
好的,下面是一个用 CUDA 加速的 Python 函数的示例: import numpy as np import cupy as cpdef accelerate_with_cuda(x, y): ...
- 下面是一个python函数、哪个说法不正确_2017秋python语言程序设计(北京信息科技大学)答案...
[单选题]以下可以终结一个循环的执行的语句是 [单选题]设计的组件之间的依赖关系图被称为: [单选题]类方法中定义了四个参数,这种情况下实际上有多少参数: [判断题]螺旋式开发可以简化项目管理,能够适 ...
- python包裹 函数_什么是最干净的方法调用一个Python函数从C++与一个Sigg包裹的Obj....
下面是我解决这个问题的工作方案.它使用了上述"无所不能"和"柔印"的建议. 特别是,我们用SWIG director创建一个回调类,然后在Python中从中派生 ...
- 领导给我一堆无序、杂乱的数据,我写了一个Python自动化脚本!
问题抽丝剥茧 这个问题也算是群友答疑.如果说同事或者老板给你一堆这样的数据,你估计会抓狂,该怎么处理呢? 仔细观察上面数据可以发现,该数据有如下2个主要特点: ① 每一行的数据长度不同.第一行和第三行 ...
- python统计大小写字母个数_编写一个Python函数,它接受一个字符串并计算大写字母和小写字母的数量...
问题why this one doesn't work? 除了语法错误和运行时错误之外,您的代码逻辑还有很长的路要走.你实际上没有按问题所问的去做.您似乎正在尝试计算单个字符中的大写字符数.那是不正确 ...
- python自动化脚本编写教程_开发工具pycharm写第一个Python自动化程序案例|python基础教程|python入门|python教程...
https://www.xin3721.com/eschool/pythonxin3721/ 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. ...
- python 从字符串中随机选取4个字符_我需要一个Python函数,当给定字符的期望概率时,它将输出4个不同字符的随机字符串...
对于四封信,我脑海中闪过的是:from random import random def randABCD(n, pA, pB, pC, pD): # assumes pA + pB + pC + p ...
最新文章
- 浏览器下载附件Content-Disposition
- 极客大赛助力BCH应用开发
- 梅原对justin wang 真人版
- 控制台异常:Could not connection
- java repaint 无效_java repaint()无效
- Custom Components 翻译
- PL/SQL批处理语句(BULK COLLECT子句和FORALL语句)
- java持久化框架对比_四种流行的持久化框架比较
- 决策树ID3算法实现与讨论(完整代码与数据)
- mongodb时间差8小时,原因及解决方案
- 记一次尴尬的经历---硅胶干燥剂颗粒堵住了耳机孔
- Anaconda安装keras教程
- Win7 Iphone4手机通过电脑上网设置 开机自动打开WIFI
- 数据挖掘十大经典算法 整理
- redis限制set大小_redis set大小限制_微信文件大小限制
- JAVA - 变量作用域
- 硬件接口之RGB888(RGB24)
- 麻将牌技法--收藏慢慢学
- Linux JKD1.8 安装及配置
- ant design vue全局引用一直提示没有isMoment参数的问题
热门文章
- 深圳职业技术学院计算机录取分,2015深圳职业技术学院录取分数线
- Struts2+Spring3+Hibernate4+Maven+EasyUI 站点收藏
- Cesium 展示——风流场制作,制作风场可视化
- 使用asset catalog管理图片资源
- mpc_local_planner 源码部分和以及在kinetic下使用
- java+springmvc+vues sm450网上办公自动化系统#毕业设计
- mysql存储过程 2000工资加200_我打工 一个月工资2000元。 1800+200的全勤。老板压了1000元。刚开...
- 原生Camera预览分辨率自定义修改
- pytorch实用工具:torchsummary、torchsnooper
- 【SQL解惑】谜题21:飞机与飞行员