什么是 Python 函数? 教程

什么是 Python 函数?

在本教程中,我们将讨论 Python 最有用的属性之一:函数。 Python 函数被认为是“第一类”对象。 First Class 对象可以分配给变量,存储在数据结构中,作为参数传递给其他函数,甚至可以从其他函数返回值。 Python 中 First Class 对象的其他示例是整数、字符串和字典。

Python 函数被定义为为运行定义的操作而创建的可重用代码部分。 它仅在从另一个函数请求或从 Python 提示符运行时运行。 函数允许用户将数据参数传递到代码段,然后返回数据结果。

Python 函数共有三种基本类型:

  • 内置函数 – 这些函数是 Python 语言的标准部分。 最新的原生 Python 解释器具有 69个内置函数.
  • 位置参数函数 – 这些函数是用户使用 def 关键字生成的。
  • 匿名函数 – 该函数没有特定名称定义。 匿名函数是使用 lambda 关键字定义的,这也是匿名函数也称为 lambda 函数的原因。

接下来我们将回顾这些函数类型。

注意:本文中我们使用的是最新版本的python 3.10.0a4。 使用较旧版本的 Python,某些代码片段可能会引发错误。 请参考 Python 文档 对于您的特定版本。

方法

需要注意的是,方法与函数的相似之处在于它们都使用一组指令来执行任务。 它们之间的区别在于方法与对象相关联,而函数则没有。

注意:在下面的每个 Python 脚本中,#!/usr/bin/python3 用作第一行,称为 shebang 行。 shebang 行描述了 Python 解释器所在的位置。 在以下脚本中,我们注意到 python3 解释器(或命令)位于 /usr/bin/python3 中。

内置函数

与用户定义的函数或 lambda 函数相比,内置函数没有唯一的定义,可以直接调用。 我们之前选择了一个最常用的预定义函数 print() 来显示对象。 这是python中内置函数的完整列表。

(https://docs.python.org/3.10/library/functions.html)

要使用这些内置函数,我们只需要调用它们,然后根据需要传递相关参数即可。 在这种情况下,我们将使用 print() 函数。 这里我们创建了一个名为 function1.py 的小脚本。

#!/usr/bin/python3  print("Python is fun.") print(1,2,3,4) print("I declare a thumb war!")

我们的输出如下。

[email protected]:~# python3 function1.py Python is fun. 1 2 3 4 I declare a thumb war! [email protected]:~#

基于用户的功能

创建基于用户的函数时,我们使用函数名称后跟一组括号。 参数总是被表示并且应该出现在特定的函数名称之后。 接下来,我们创建一个名为 function2.py 的简单 Python 脚本进行演示。

#!/usr/bin/env python3  def user_function():   print("Hi there! I'm a function!")  user_function()

下面是我们的输出。

[email protected]:~# python3 function2.py Hi there! I'm a function! [email protected]:~#

注意 user_function() 前面的 def 关键字。 Python 使用 def 关键字来定义函数。 函数段块中的指令必须缩进。 这个缩进的语句构成了函数的主体。 运行上述命令时,我们得到以下输出。

#!/usr/bin/env python3  def user_function(firstname):   print(firstname + " at Liquid Web")  user_function("David") user_function("Todd") user_function("Jackie")

我们的输出如下。

[email protected]:~# python3 function3.py David at Liquid Web Todd at Liquid Web Jackie at Liquid Web [email protected]:~#

请注意“at Liquid Web”字符串中第 3 行的额外空格。 这个空白间隙在单词“at”之前添加了一个空格,确保输出看起来像一个完整的句子,如打印行所示。

匿名函数

匿名函数没有定义的名称,与 def 关键字不同。 在这种情况下,匿名函数是使用 lambda 关键字定义的。

  • Lambda 函数包含自己的本地命名空间。 除了参数列表或全局命名空间中的变量之外,它们无法访问其他变量。
  • 匿名函数需要一个表达式来调用。
  • Lambda 形式可以采用多个参数,但只会返回一个表达式值。 它不能包含多个表达式或命令。

什么是参数?

信息通过参数引入到函数中。 应该注意的是,在 Python 文档中,参数通常缩写为较小的术语 args。 一个相关的术语称为关键字参数。 该术语在 Python 文档中缩写为 kwargs。 可以将多个参数添加到函数中,只要它们用逗号分隔即可。

参数或参数?

通常,函数可以互换使用术语参数和实参。 从功能上看:

  • 参数是在定义函数内的括号内列出的变量。
  • 参数是在调用时发送给函数的值。

调用函数

当我们定义函数时,我们为其分配一个名称。 要调用该函数,我们使用函数名称后跟一组括号。 这标识了将包含在函数本身中并改进代码块结构的参数。 在下面的示例中,我们演示了这个概念。

#!/usr/bin/python3  # Here we define the Function  def printme(user_string):         "The function defined as printme, prints this string."         print (user_string)         return;  # Now, we can call the printme function at anytime later in the code  printme("this is the first call to the user defined function above.")  printme("This is the second call to the same function defined above.")

运行上述命令时,我们得到以下输出。

[email protected]:~# python3 function4.py This is the first call to the user defined function above. This is the second call to the same function defined above. [email protected]:~#

一旦函数的基本结构完成,我们就可以通过从另一个函数或直接从 Python 提示符调用它来运行它。

应该注意的是,在函数内定义的变量是局部作用域的。 这意味着在函数内定义的变量只能在该函数内识别。 函数中的变量仅在函数执行时保持不变。 全局变量是在函数外部使用 global 关键字定义的,并且即使在被函数执行后仍然存在。

将参数传递给函数

使用以下四个参数之一来调用函数。

  • 默认参数 – 如果未为函数调用提供默认值,则此参数假定使用默认值。
  • 关键字参数 – 当在函数调用中使用关键字参数时,关键字参数调用标识参数名称的参数。 这让我们可以乱序放置参数或跳过它们。 我们可以这样做,因为 Python 解释器可以使用提供的关键字来匹配参数的值。
  • 必需参数 – 这些是按精确位置顺序传递给函数的参数。 这意味着函数中所需的参数数量应该与定义函数所需的参数数量相匹配。
  • 可变长度参数 – 如果我们需要处理比函数定义中要求的更多的参数,则使用可变长度的参数。 与必需和默认参数类型不同,这些参数在函数定义中未命名。

递归

递归的定义是一个根据自身定义事物的过程。 这意味着递归函数会回调自身直到问题解决。 此函数重复运行一组指令,调用自身直到完成运行。 这意味着我们可以通过函数循环输出数据,直到达到所需的结果。 在下图中,我们看到了该函数的工作原理。

# here we assume that remainder is a positive integer  def hi_recursive(remaining):      # here is the base case - when the remainder = 0      if remaining == 0:          return      print('hi')      # Call to the function itself, with a reduced remaining count      hi_recursive(remaining - 1)

递归函数一般有两部分:

  • 基本情况,这是确定递归函数何时停止的标识符。
  • 对自己的调用。

下面是一个递归函数的例子,用于查找整数的阶乘。 一个数的阶乘是从 1 到该数的所有整数的乘积。 这里我们使用 num = 3。

#!/usr/bin/python3 def factorial(x):     """This is a recursive function to find the factorial of an integer"""         if x == 1:            return 1         else:            return (x * factorial(x-1))  num = 3 print("The factorial of", num, "is", factorial(num))

我们的输出显示了这一点。

[email protected]:~# python3 function6.py The factorial of 3 is 6 [email protected]:~#

在上面的代码示例中, factorial() 是一个递归函数,因为它调用自己。 当我们使用正整数调用此函数时,它会通过减少数字递归调用自身。 每个函数都将数字与其下方数字的阶乘相乘,直到它等于 1。 下图解释了这个递归调用。

factorial(3)          # 1st call with 3 3 * factorial(2)      # 2nd call with 2 3 * 2 * factorial(1)  # 3rd call with 1 3 * 2 * 1             # return from 3rd call as number=1 3 * 2                 # return from 2nd call 6                     # return from 1st call

当数字减少到 1 时,递归函数结束。 这是基本条件。

使用这种类型的功能时应该小心。 如果设置不当,功能可能无法终止或使用过多的内存或处理器能力。 但是,如果正确实施,递归是解决问题的一种有效而优雅的方法。

结论

这完成了我们关于 Python 函数的教程。 Python 函数是一组旨在执行特定任务的相关语句。 这背后的想法是重复使用相同的代码,使用不同的输入来产生替代输出。 可以定义这些函数以在 Python 程序中实现多个目标。 总的来说,这是 Python 编程语言的主要构建块之一。

我们以成为 Hosting™ 中最有帮助的人而自豪!

我们的支持团队由经验丰富的 Linux 技术人员和才华横溢的系统管理员组成,他们对多种网络托管技术(包括本文中讨论的技术)了如指掌。 如果您对此信息有任何疑问,我们随时可以回答与本文相关问题的任何询问,一年 365 天,一周 7 天,一天 24 小时。

如果您是完全托管的 VPS 服务器, Cloud 专用,VMWare 私有 Cloud, 私有父服务器, 托管 Cloud 服务器或专用服务器所有者,并且您对执行列出的任何步骤感到不舒服,可以通过电话 800.580.4985 与我们联系,一个 聊天 或支持票以帮助您获取更多信息。