【摘要】对于python小白来说,写好一个python代码并不容易,不过你知道python函数要素有哪些?这7点是你写好python代码的关键,如果你想学好python,那么本文内容一定要自己试试,毕竟实践出真知,那么python函数要素有哪些?这7点是你写好python代码的关键。

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

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

1、python函数要素有哪些——怎样算是好函数?

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

·命名合理

·单一功能

·包括文档字符串

·返回一个值

·不超过 50 行

·是幂等函数或纯函数

对许多人来说,这些要求可能显得过于苛刻了。不过,我保证,如果你的函数遵循这些规则,你的代码会非常漂亮,会让其他的程序员都“馋哭”的。

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

2、python函数要素有哪些——注意命名

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

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

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

1def getknn(from_df):

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

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

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

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

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

·“get”这个词是无关紧要的。对于大多数命名比较好的函数来说,很明显有一些东西会从函数中返回,它的名字将反映这一点。

·from_df 也不是必要的。如果没有明确的参数名称,函数的文档字符串或类型注释会描述参数的类型。

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

1def k_nearest_neighbors(dataframe):

即使是外行,这个函数要计算的内容也很清楚,参数的名称(dataframe)也清楚地表明了参数类型。

3、python函数要素有哪些——单一功能

单一功能原则不仅适用于类和模块,也同样适用于函数。

一个函数应该只有一个功能。也就是说,它应该只做一件事。

一个重要的原因是,如果每个函数只做一件事,只有这件事发生了变化,才需要改变这个函数。此外,如果这个函数的单个功能不再需要了,直接把它删了就行了。

还是用例子来说明吧。

下面这个函数,可以做不止一件“事情”:

def calculate_and print_stats(list_of_numbers):

sum = sum(list_of_numbers)

mean = statistics.mean(list_of_numbers)

median = statistics.median(list_of_numbers)

mode = statistics.mode(list_of_numbers)

print('-----------------Stats-----------------')

print('SUM: {}'.format(sum) print('MEAN: {}'.format(mean)

print('MEDIAN: {}'.format(median)

print('MODE: {}'.format(mode)

这个函数做了两件事:一是计算一组关于数字列表的统计数据,二是将它们打印到 STDOUT。

如果需要计算新的或不同的统计数据,或者需要改变输出的格式,就需要对这个函数进行调整。所以,这个函数最好写成两个独立的函数:一个用来执行并返回计算结果,另一个用来获取这些结果并打印出来。

这种处理方式,不仅能让测试函数更容易,并且还允许这两个部分有了迁移性,如果合适的话,还可能一起应用到不同的模块中。

在编程中,你会发现好多函数都可以做很多很多事情。同样,为了可读性和可测试性,这些函数应该被分解成更小的函数,每个函数只有一个功能。

4、python函数要素有哪些——文档字符串(Docstrings)

虽然每个人似乎都知道 PEP - 8,它定义了 Python 的样式指南,但是很少有人知道 PEP - 257,它是关于文档字符串的。我再这里不简单地重复 PEP - 257 的内容了,你可以在闲暇时读一下。其中的关键内容是:

·每个函数都需要有一个文档字符串

·使用适当的语法和标点符号;用完整的句子写

·首先对函数的作用进行一句话的总结

·使用说明性语言而不是描述性语言

在编写函数时,要养成写文档字符串的习惯,并在编写函数代码之前尝试写一下。如果你不能写一个清晰的文档字符串来描述函数做什么,就说明你需要再考虑考虑为什么要写这个函数了。

5、python函数要素有哪些——返回值

函数可以被认为是一些独立的程序。它们以参数的形式接受一些输入,并返回一些结果。

参数有没有都可以,但从 Python 内部的角度来看,返回值是必须要有的。你不可能创建一个没有返回值的函数。如果函数没有返回值,Python 会“强制”返回 None。你可以测试一下这段代码:

❯ python3Python 3.7.0 (default, Jul 232018, 20:22:55)[Clang 9.1.0 (clang-902.0.39.2)]>Type "help", "copyright",

"credits"or"license"for more information.

>>> def add(a, b):...

print(a + b)...

>>> b = add(1, 2)3

>>> b

>>> b isNoneTrue

你会发现 b 的返回值实际上是 None。即使你写的函数没有返回语句,它仍然会返回一些东西。而且,每个函数都应该返回一个有用的值,测试起来也会更方便。毕竟,你写的代码应该能够被测试。

试想一下,测试上面的 add 函会有多艰难。遵循这个概念,我们应该这样写代码:

with open('foo.txt', 'r') as input_file:

for line in input_file:

if line.strip().lower().endswith('cat'):

# ... do something useful with these lines

if line.strip().lower().endswith(‘cat’): 这一行能够工作,是因为每个字符串方法( strip ( )、lower ( )、end swith ( ) )都返回一个字符串作为调用函数的结果。

当给定函数没有返回值时,有一些常见的原因:

“它所做的只是[一些与 I/O 相关的事情,比如将一个值保存到数据库中]。我不能返回任何有用的东西。”

我不同意。如果操作顺利完成,函数可以返回 True。

“我们修改了其中一个参数,将其用作参考参数。”

这里有两点需要注意。首先,尽最大努力避免这种做法。用好了令人惊讶,用不好非常危险。其次,即使这样做不可行,复制某个参数的成本太高,你也可以回到上一条建议。

“我需要返回多个值。单独返回一个值是没有意义的。”

可以使用元组返回多个值。总是返回一个有用的值,调用者总是可以自由地忽略它们。

6、python函数要素有哪些——函数长度

让你读一个 200 行的函数,并说出它是做什么的,你是什么感受?

函数的长度直接影响可读性,从而影响可维护性。所以要保持你的函数简短。50 行是一个随意的数字,在我看来是合理的。你编写的大多数函数应该要短一些。

如果一个函数遵循单一功能原则,它很可能是相当短的。如果它是纯函数或是幂等的(下面讨论) ,它也可能是短的。

那么,如果函数太长,应该怎么做?重构。这会改变程序的结构而不改变其行为。

从一个长函数中提取几行代码,并把它们变成自己的函数。这是缩短长函数的最快、也是最常见的方式。加上你给所有这些新函数取了合适的名称,因此生成的代码读起来也会更容易。

7、python函数要素有哪些——幂等和函数纯度

不管被调用了多少次,幂等函数总是在给定相同参数集的情况下返回相同的值。

结果不依赖于非局部变量、参数的可变性或来自任何 I / O 流的数据。下面的这个 add_three(number)函数是幂等函数:

def add_three(number):

"""Return *number* + 3."""

return number + 3

不管一个人调用 add_three(7)多少次,答案总是 10。以下是一个非幂等函数:

def add_three():

"""Return 3 + the number entered by the user."""

number = int(input('Enter a number: '))

return number + 3

这个函数的返回值取决于 I / O,即用户输入的数字。对 add_three()的每次调用都会返回不同的值。

如果它被调用两次,用户可以第一次输入 3,第二次输入 7,分别调用 add_three()返回 6 和 10。

幂等性的一个现实中例子是在电梯前点击“向上”按钮。第一次按时,电梯会被“通知”你要上去。因为按按钮是幂等的,所以反复按它都没有什么影响。结果是一样的。

以上就是《python函数要素有哪些?这7点是你写好python代码的关键》的全部内容,这些python的使用技巧,全部都要建立在正确无误的代码上,环球网校的小编也祝大家python学习之路顺利。如果你想知道更多的python编程知识,可以点击下方资料下载链接。

python函数的组成要素_python函数要素有哪些?这7点是你写好python代码的关键相关推荐

  1. python函数闭包和递归_python函数基础3--闭包 + 递归 + 函数回调

    一.闭包 1. 函数嵌套 defouter():print("外层函数")definner():print("内层函数")returninner() outer ...

  2. python函数的作用是_Python函数一

    函数 一.函数的作用 函数就是一段具有独立功能的代码块整合到一个整体并命名,在需要的位置调用这个名称即可完成对应的需求 函数在开发过程中,可以更高效的实现代码重用 二,函数的使用步骤 2.1 定义函数 ...

  3. python函数参数定义顺序_Python函数定义-位置参数-返回值

    原标题:Python函数定义-位置参数-返回值 1 函数介绍 函数在编程语言中就是完成特定功能的一个词句组(代码块),这组语句可以作为一个单位使用,并且给它取一个名字.可以通过函数名在程序的不同地方多 ...

  4. python中sort返回值_Python函数你真的都学会了吗?来看看这篇Python高阶函数!

    二.高阶函数 高级函数, 英文叫 Higher-order Function. 那么什么是高阶函数呢? 在说明什么是=高阶函数之前, 我们需要对函数再做进一步的理解! 2.1 函数的本质 函数的本质是 ...

  5. python函数作用域与闭包_python函数名称空间与作用域、闭包

    一.命名空间概念 1.命名空间(name space) 名称空间是存放名字的地方. 若变量x=1,1存放在内存中,命名空间是存放名字x.x与1绑定关系的地方. 2.名称空间加载顺序 python te ...

  6. 在python中、正确的函数定义格式为_Python函数的定义与实现

    1. 函数的介绍 函数是 实现具有特定功能的代码块 Python中预制了许多内置函数,也可以根据自己的需求创建自定义的函数 隐藏实现功能的细节 代码的复用 提高可读性,便与调试 def 函数名(形参1 ...

  7. python函数的嵌套调用_python函数的嵌套调用

    我们之前的代码都是定义函数然后直接调用,但是没有在一个函数内调用另外一个函数,今天就感受下函数嵌套调用. 提示:如果你想当然的认为函数嵌套是在函数内部又嵌套定义一个函数这种操作的话,那么这叫做闭包.相 ...

  8. python函数定义与参数_Python函数的定义方式与函数参数问题实例分析

    本文实例讲述了Python函数的定义方式与函数参数问题.分享给大家供大家参考,具体如下: 涉及内容: 函数的定义方式 函数的文字描述 空操作语句 位置参数 默认参数 关键参数 可变长度参数 函数的定义 ...

  9. python函数的使用方法_Python函数使用

    Python函数用def指定函数名,可以指定输入参数,可以指定参数的默认值,也可以用return指定返回值. 调用时除了默认的位置赋值,也可按关键字赋值. 一.函数不带参数.没有返回值 defhell ...

最新文章

  1. 南京大学教授施斌及其团队—— 光纤变“神经” 大地能感知
  2. java bindview_手写 ButterKnife BindView
  3. OpenCV的HSV空间度量与标准HSV不一样,使用的时候需要换算;另附一个调色取色的小工具
  4. [C#] 连接数据库并验证用户名和密码
  5. 跟着书本学习CSS(2)
  6. 经典卷积网络进阶--ResNet详解
  7. MVC+EF三层+抽象工厂
  8. HTML元素基础学习
  9. 微商人赚钱的4个落地动作
  10. 机器学习基础算法26-聚类理论
  11. HTML5 Web Storage
  12. SK-Learn之决策树
  13. 画直线的算法之DDA算法+代码实现(法一)
  14. C语言贪吃蛇大作业总结,C语言实现贪吃蛇游戏
  15. 基于pyqt5实现QQ截图功能
  16. 三目表达式的个人总结
  17. APNG替代GIF制作完美动效
  18. hdu 5514 2015 icpc 沈阳现场 F Frogs
  19. 【补档2017.12.28】我的2017-漫长的苦痛与渐入佳境的愤怒
  20. Vulkan 究竟是什么

热门文章

  1. python的return语句求两数之和_Python的return语句可以返回多个不同类型的值
  2. 6-3 求链表的倒数第m个元素
  3. python回归方程系数计算_线性回归中的正规方程将θ系数返回为“NaN”
  4. mac sudo免密码
  5. iTerm2 使用笔记
  6. 自学it18大数据笔记-第三阶段Scala-day06——会持续更新……
  7. JSP 中使用Struts2的值
  8. 【数据结构与算法】之深入解析“交错字符串”的求解思路与算法示例
  9. LeetCode Algorithm 19. 删除链表的倒数第 N 个结点
  10. python中星号变量的几种特殊用法