什么是 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!")

我们的输出如下。

root@host:~# python3 function1.py
Python is fun.
1 2 3 4
I declare a thumb war!
root@host:~#

基于用户的功能

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

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

user_function()

下面是我们的输出。

root@host:~# python3 function2.py
Hi there! I'm a function!
root@host:~#

注意 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")

我们的输出如下。

root@host:~# python3 function3.py
David at Liquid Web
Todd at Liquid Web
Jackie at Liquid Web
root@host:~#

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

匿名函数

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

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

什么是论据?

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

参数或参数?

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

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

调用函数

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

#!/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.")

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

root@host:~# 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.
root@host:~#

函数的基本结构完成后,我们可以通过从另一个函数调用它或直接从 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)

递归函数通常有两个部分:

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

下面是一个 example 递归函数求整数的阶乘。 一个数的阶乘是从 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))

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

root@host:~# python3 function6.py
The factorial of 3 is 6
root@host:~#

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

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

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

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

结论

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

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

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

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