Functions 和 Help

简介

你已经了解并使用了 print
abs
。但 Python 有更多的函数,定义和使用自己的函数是 Python 编程的重要部分。

在这节课中,你将学习更多关于使用和定义函数的知识。

获取帮助

你已经在之前的教程中见过 abs
函数,如果你忘记了它的用法怎么办?

help()
函数可以帮助你。 如果你掌握如何使用 help()
函数,你将掌握理解其他函数的关键。

如下是一个例子:

help(round)
Help on built-in function round in module builtins:
round(number, ndigits=None)
Round a number to a given precision in decimal digits.
The return value is an integer if ndigits is omitted or None.  Otherwise
the return value has the same type as the number.  ndigits may be negative.

help()
显示了两个要点:

  1. 函数 round(number[, ndigits])
    的头 header。 在本例中 round()
    使用 number
    类型的变量作为参数。另外,我们还可以给出一个单独的参数,它可以被描述为 ndigits
  2. 对该功能的简要英文描述。

常见的陷阱:当您查找一个函数时,记得传入函数本身的名称,而不是调用该函数的结果。

当我们对 round()
的调用结果使用 help 函数会发生什么?

help(round(-2.01))
Help on int object:
class int(object)
|  int([x]) -> integer
|  int(x, base=10) -> integer
|
|  Convert a number or string to an integer, or return 0 if no arguments
...

Python这样从内到外计算表达式。首先他计算 round(-2.01)
的值,然后,然后表达式的输出作为 help
函数的参数。

(返回的结果有很多关于整数的内容!在我们稍后讨论Python中的对象、方法和属性之后,上面大量的 help 输出将更有意义。)

round
是一个非常简单的函数,具有很短的文档字符串。 help
当处理更复杂的、可配置的函数如 print
效果更明显。 如果下面的输出看起来不可思议,不要担心……现在,看看你是否能从这个 help 中找到什么新的东西。

help(print)
Help on built-in function print in module builtins:
print(...)
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file:  a file-like object (stream); defaults to the current sys.stdout.
sep:   string inserted between values, default a space.
end:   string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.

如果你正在寻找 print 函数的用法,你可能会学到,print 可以接受一个名为 sep
的参数,打印我们传入的东西。

定义函数

内置函数(Builtin functions )很棒,我们只能使用它们做这么多,我们需要开始定义自己的函数。下面是一个简单的例子。

def least_difference(a, b, c):
diff1 = abs(a - b)
diff2 = abs(b - c)
diff3 = abs(a - c)
return min(diff1, diff2, diff3)

这里创建了一个函数 least_difference
,它传入了三个参数 a
b
,和 c

Functions start with a header introduced by the def
keyword. The indented block of code following the :
is run when the function is called.

函数以 def
关键字开始。 :
后面的缩进代码块在函数被调用时运行。

return
是与函数唯一关联的另一个关键字。当 Python 遇到 return
语句时,它立即退出函数,并将右边的值传递给调用上下文。

Is it clear what least_difference()
does from the source code? If we’re not sure, we can always try it out on a few examples:

我们能从 least_difference()
的源代码看出他的用法么? 如果我们不确定,我们可以使用几个小例子来尝试一下:

print(
least_difference(1, 10, 100),
least_difference(1, 10, 10),
least_difference(5, 6, 7), # Python allows trailing commas in argument lists. How nice is that?
)

或者, help()
函数可以告诉我们一些有关它的信息。

help(least_difference)
Help on function least_difference in module __main__:
least_difference(a, b, c)

Python 还不够聪明,无法阅读我的代码并将其转换成漂亮的英文描述。然而,当我编写一个函数时,我可以在所谓的 docstring
中提供一个描述。

Docstrings

def least_difference(a, b, c):
"""Return the smallest difference between any two numbers
among a, b and c.
>>> least_difference(1, 5, -5)
4
"""
diff1 = abs(a - b)
diff2 = abs(b - c)
diff3 = abs(a - c)
return min(diff1, diff2, diff3)

docstring 是紧接在函数头之后的三引号字符串(可以跨多行)。当我们在函数上调用 help()
时,它会显示 docstring 文档字符串。

help(least_difference)
Help on function least_difference in module __main__:
least_difference(a, b, c)
Return the smallest difference between any two numbers
among a, b and c.
>>> least_difference(1, 5, -5)
4

此外: 调用示例

文档字符串 Docstrings 的最后两行是一个示例函数调用和结果。 ( >>>
是对 Python 交互式 shell 中使用的命令提示符的引用。) Python不运行示例调用——它只是为了读者理解而存在。 在函数的文档字符串 Docstrings 中包含1个或多个示例调用的惯例并不是普遍遵循的,但它可以非常有效地帮助别人理解您的函数。有关的真实示例,请参见
this docstring for the numpy function np.eye

.

优秀的程序员使用 docstrings 文档字符串,所以,你也应该开始写 docstrings 文档字符串。

没有返回值的函数

如果我们在函数中不包含 return
关键字会发生什么

def least_difference(a, b, c):
"""Return the smallest difference between any two numbers
among a, b and c.
"""
diff1 = abs(a - b)
diff2 = abs(b - c)
diff3 = abs(a - c)
min(diff1, diff2, diff3)
print(
least_difference(1, 10, 100),
least_difference(1, 10, 10),
least_difference(5, 6, 7),
)
None None None

Python 允许我们定义这样的函数。调用它们的结果是特殊值 None
。(这与其他语言中的“null”概念类似。)

如果没有 return
语句, least difference
是完全没有意义的,但无返回值的函数也可以做一些有用的事情。

我们已经看到了两个这样的例子: print()
help()
不返回任何东西。

我们调用它们只是因为它们的其他效果(在屏幕上显示一些文字)。其他有用的无参数示例包括写入文件或修改输入。

mystery = print()
print(mystery)
None

默认参数

当我们调用 help(print)
时,我们看到 print
函数有几个可选参数。例如,我们可以为 sep
指定一个值,以便在打印的参数之间放置一些特殊字符串

print(1, 2, 3, sep=' < ')
1 < 2 < 3

但如果我们不指定值, sep
将被视为具有默认值 ' '
(单个空格)。

print(1, 2, 3)

向我们定义的函数添加带有默认值的可选实参是非常容易的:

def greet(who="Colin"):
print("Hello,", who)
greet()
greet(who="Kaggle")
# (In this case, we don't need to specify the name of the argument, because it's unambiguous.)
greet("world")
Hello, Colin
Hello, Kaggle
Hello, world

函数中调用函数

您可以将函数作为参数提供给其他函数。如下面的例子:

def mult_by_five(x):
return 5 * x
def call(fn, arg):
"""Call fn on arg"""
return fn(arg)
def squared_call(fn, arg):
"""Call fn on the result of calling fn on arg"""
return fn(fn(arg))
print(
call(mult_by_five, 1),
squared_call(mult_by_five, 1),
sep='\n', # '\n' is the newline character - it starts a new line
)

作用于其他函数的函数称为“高阶函数”。

你可能暂时不会自己写。但是,Python 中还内置了一些更高级的函数,您会发现调用它们很有用。

下面是一个使用“max”函数的有趣例子。

默认情况下, max
返回最大的参数。但如果我们使用可选的 key
参数传入函数,它将返回使 key(x)
最大化的参数 x

def mod_5(x):
"""Return the remainder of x after dividing by 5"""
return x % 5
print(
'Which number is biggest?',
max(100, 51, 14),
'Which number is the biggest modulo 5?',
max(100, 51, 14, key=mod_5),
sep='\n',
)
Which number is biggest?
100
Which number is the biggest modulo 5?
14

轮到你了

函数为 Python 编程打开了一个全新的世界。
尝试自己使用它们

Have questions or comments? Visit the Learn Discussion forum
to chat with other Learners.

全栈港
我还没有学会写个人说明!
上一篇

30 周年生日,Python 先驱是怎么评价这门语言的?

下一篇

消息称B社新作《星空》原预期于2021年内发布

你也可能喜欢

评论已经被关闭。

插入图片