Skip to content

Python 函数

在 Python 中,函数是一段带有名称的代码块。我们可以通过函数名调用它,函数块内的代码将被执行。函数名不能使用保留关键字。函数名必须遵循Python 标识符的定义规则。

函数参数

我们可以将一些数据传递给函数进行操作,这些数据称为函数参数。函数参数之间用逗号分隔。一个函数可以有任意数量的参数。

从函数返回数据

函数可以向调用程序返回数据。与其他流行的编程语言不同,Python 函数定义中不指定返回类型。

在 Python 中使用 def 关键字定义函数

在Python中,我们可以使用def关键字定义函数。让我们来看几个Python函数的例子。

python
def hello():
    print('Hello World')
 
 
def add(x, y):
    print(f'arguments are {x} and {y}')
    return x + y

基于以上示例,我们可以将函数结构定义如下。

python
def function_name(arguments):
    # code statements

Python函数

在 Python 中调用函数

我们可以通过函数名来调用它。如果函数接受参数,则必须在调用函数时传递这些参数。

python
hello()
sum = add(10, 5)
print(f'sum is {sum}')

我们调用了自己定义的 hello() 和 add() 函数。我们还调用了 print() 函数,它是Python 的内置函数之一。

Python 函数类型

Python 中有两种类型的函数。

  • 内置函数:Python 语言提供的函数,例如print()、len()、str()等。
  • 用户自定义函数:我们在 Python 程序中定义的函数。

Python 函数默认参数

Python 允许为函数参数设置默认值。如果调用者没有传递参数,则使用默认值。

python
def hello(year=2019):
    print(f'Hello World {year}')
 
hello(2020)  # function parameter is passed
hello()  # function parameter is not passed, so default value will be used

输出

shell
Hello World 2020
Hello World 2019

函数内部的多个 return 语句

一个函数可以有多个返回语句。但是,当执行到其中一个返回语句时,函数执行就会终止,并将值返回给调用者。

python
def odd_even_checker(i):
    if i % 2 == 0:
        return 'even'
    else:
        return 'odd'
 
 
print(odd_even_checker(20))
print(odd_even_checker(15))

使用 yield 关键字逐个返回多个值

Python 函数可以逐个返回多个值。这是通过yield 关键字实现的。当需要函数返回大量值并进行处理时,这种方式非常有用。我们可以使用 yield 语句将返回值拆分成多个块。这种类型的函数也称为生成器函数。

python
def return_odd_ints(i):
    x = 1
    while x <= i:
        yield x
        x += 2
 
output = return_odd_ints(10)
for out in output:
    print(out)

输出:

shell
1
3
5
7
9

Python 函数中的可变参数

Python 允许在函数定义中使用三种类型的参数。

  1. 形式论证:也就是我们目前在例子中看到的那些论证。
  2. 非关键字参数的数量可变:例如,def add(*args)
  3. 可变数量的关键字参数或命名参数:例如,def add(**kwargs)

关于Python中的可变参数,以下是一些重要的要点:

  • 参数顺序应为:形式参数、*args、**kwargs。
  • 使用诸如 args 和 kwargs 之类的可变参数名并非强制性的。但是,为了提高代码的可读性,最佳实践是使用它们。
  • args 类型为元组。因此,我们可以传递一个元组来与 *args 变量进行映射。
  • kwargs 的类型是dict。因此,我们可以传递一个字典来与 **kwargs 变量进行映射。

以下是一个在函数中使用可变参数的简单示例。

python
def add(x, y, *args, **kwargs):
    sum = x + y
    for a in args:
        sum += a
 
    for k, v in kwargs.items():
        sum += v
    return sum
 
total = add(1, 2, *(3, 4), **{"k1": 5, "k2": 6})
print(total)  # 21

Python中的递归函数

当一个函数调用自身时,它被称为递归函数。这种情况在编程中被称为递归。

使用递归时务必格外小心,因为函数有可能永远无法终止,从而陷入无限循环。以下是一个使用递归打印斐波那契数列的简单示例。

python
def fibonacci_numbers_at_index(count):
    if count <= 1:
        return count
    else:
        return fibonacci_numbers_at_index(count - 1) + fibonacci_numbers_at_index(count - 2)
 
count = 5
i = 1
while i <= count:
    print(fibonacci_numbers_at_index(i))
    i +=

了解递归固然好,但大多数情况下编程中并不需要用到它。你可以使用 for 循环或 while 循环来实现同样的功能。

函数的数据类型

Python 函数是 'function' 类的实例。我们可以使用type() 函数来检查这一点。

python
def foo():
    pass

print(type(foo))

输出:

shell
<class 'function'>

Python中的函数与方法

  • Python 函数是定义它的 Python 脚本文件的一部分,而方法是在类定义中定义的。
  • 如果函数位于同一模块中,我们可以直接调用它。如果函数定义在不同的模块中,我们可以先导入该模块,然后再直接调用函数。我们需要一个类或该类的对象才能调用方法。
  • Python 函数可以访问所有全局变量,而Python 类方法可以访问全局变量以及类属性和函数。
  • Python 函数的数据类型是 'function',而 Python 方法的数据类型是 'method'。

让我们来看一个 Python 中函数和方法的简单例子。

python
class Data:
    def foo(self):
        print('foo method')
 
def foo():
    print('foo function')
  
# calling a function
foo()
 
# calling a method
d = Data()
d.foo()
 
# checking data types
print(type(foo))
print(type(d.foo))

输出:

shell
foo function
foo method
<class 'function'>
<class 'method'>

Python 函数的优势

  • 代码可重用性强,因为我们可以多次调用同一个函数。
  • 由于我们可以为不同的任务定义不同的函数,因此代码是模块化的。
  • 提高代码的可维护性
  • 抽象之处在于调用者无需了解函数的具体实现。

Python中的匿名函数

匿名函数没有名称。在Python中,我们可以使用lambda关键字定义匿名函数。

python
def square(x):
    return x * x
 
 
f_square = lambda x: x * x
 
print(square(10))  # 100
print(f_square(10))  # 100

结论

函数是编程语言的重要组成部分。Python 函数使用 def 关键字定义。Python 函数可以接受可变数量的参数。Python 也支持匿名函数。它们可以返回单个值,也可以逐个返回多个值。

接下来是什么?

资源