欢迎访问宙启技术站
智能推送

了解Python中的函数并学习如何定义函数

发布时间:2023-06-26 07:02:58

Python 是一种高级编程语言,支持多种编程范式,是广泛用于各种领域的强大工具。其中的函数是一种重要的特性,可以帮助编程者实现代码的模块化和重用,提高代码的可读性和可维护性。在本篇文章中,我们将会讲解 Python 中的函数,并学习如何定义函数。

函数的定义

函数是一组代码,它们可以接受多个输入参数,并根据这些参数执行一些预定的操作,最后返回一个结果。Python 中的函数可以通过 def 关键字进行定义,语法如下:

def function_name(parameters):
    """docstring"""
    statement(s)

其中,function_name 为函数的名称,parameters 表示函数的参数,可以是多个,之间用逗号隔开。函数体以冒号开始,结束于下一行,其中的语句可以使用 return 语句来返回结果。同时,我们建议在函数开头添加一段字符串,叫做文档字符串(docstring),它可以用来描述函数的功能和使用方法。

函数的调用

定义好函数后,我们可以使用它来执行我们所需要的操作。Python 中的函数调用很简单,我们只需要输入函数名和所需参数,中间使用括号隔开即可。例如:

def greet(name):
    """Return a greeting to someone"""
    print(f"Hello, {name}!")

greet("Alice")  # 输出 "Hello, Alice!"

在这个例子中,我们传递一个名为 "Alice" 的字符串作为参数,函数值输出了一个包含该字符串的文本信息。

函数的参数

Python 中的函数可以接受多种类型的参数,在定义时可以通过指定参数的默认值、数量等等来灵活地调整函数的参数。常用的有以下几种:

1. 位置参数

这是我们在上面的例子中使用的参数传递方式,它的特点在于参数的顺序必须和函数定义时的顺序一致。例如,我们定义一个计算两个数和差的函数:

def arithmetic(num1, num2):
    """Return the sum and difference of two numbers"""
    sum_ = num1 + num2
    diff = num1 - num2
    return sum_, diff

如果我们想计算 3 和 5 的和差,我们需要按照函数定义时的参数顺序传递参数,即 arithmetic(3, 5)。函数返回值为 (8, -2)。

2. 关键字参数

关键字参数是指我们在调用函数时使用参数名来传递值的方式。它的优势在于可以灵活地组合不同的参数,避免了参数顺序错误的问题。例如,我们给上面的函数增加一个布尔型参数,用来表示是否打印结果:

def arithmetic(num1, num2, print_=True):
    """Return the sum and difference of two numbers"""
    sum_ = num1 + num2
    diff = num1 - num2
    if print_:
        print(f"Sum: {sum_}, Diff: {diff}")
    return sum_, diff

如果我们只想查看 2 和 4 的和差,但不打印结果,我们可以这样调用函数:

arithmetic(num1=2, num2=4, print_=False)

3. 默认参数

默认参数是一种方便的参数传递方式,它可以在定义函数时给某些参数指定默认值,这样在函数调用时可以省略这些参数。例如,我们修改上面的计算函数,将 print_ 参数设为默认为 True:

def arithmetic(num1, num2, print_=True):
    """Return the sum and difference of two numbers"""
    sum_ = num1 + num2
    diff = num1 - num2
    if print_:
        print(f"Sum: {sum_}, Diff: {diff}")
    return sum_, diff

这样,我们在调用函数时可以不指定 print_ 参数的值,函数会自动采用默认值:

arithmetic(2, 4)  # 输出 "Sum: 6, Diff: -2"

4. 可变参数

可变参数是一种特殊的函数参数,它可以接受任意数量的位置参数或关键字参数,并且将其变成一个元组(位置参数)或字典(关键字参数)。我们可以在参数前面加上一个 * 号(位置参数)或 ** 号(关键字参数)来实现可变参数的定义。例如:

def family_greet(*names, greeting="Hello"):
    """Greet a whole family with a custom message"""
    print(greeting + ", " + ", ".join(names) + "!")

这个函数接受任意数量的位置参数,并将其组装成一个字符串。函数还接受一个名为 greeting 的关键字参数,默认为 "Hello"。我们可以这样调用该函数:

family_greet("Alice", "Bob", "Charlie", greeting="Hey")  # 输出 "Hey, Alice, Bob, Charlie!"

函数的返回值

Python 中的函数可以封装计算、操作等等的逻辑,并返回这些处理后的结果。一个函数的返回值由 return 语句指定,其中可以使用一个表达式来表示函数的结果。例如,我们定义一个返回平方的函数:

def square(num):
    """Return the square of a number"""
    return num ** 2

这个函数接受一个数值型参数 num,计算出它的平方并返回。我们可以这样调用该函数:

result = square(3)
print(result)  # 输出 "9"

同时,Python 也提供了一个返回 None 的默认返回值,它表示函数没有返回值。在函数没有特别需要返回的情况下,我们可以省略 return 语句,这个时候函数会自动返回 None。例如:

def do_nothing():
    """A function that does nothing"""
    pass

我们可以这样调用该函数,查看它的返回值:

result = do_nothing()
print(result)  # 输出 "None"

函数的局部变量和全局变量

在Python中,函数内部和函数外部都可以定义变量。函数内部定义的变量叫做局部变量,它独立于函数之外的环境,并且只在函数内部可见。函数外部定义的变量叫做全局变量,它可以在函数内部被访问,但需要显式地使用 global 关键字声明一下。

例如:

x = 10  # 全局变量

def foo():
    y = 5  # 局部变量
    z = x + y  # 访问全局变量需要使用 global 关键字
    return z

result = foo()
print(result)  # 输出 "15"

函数式编程

Python 是一种支持函数式编程的语言,它提供了许多有用的内置函数来支持函数式编程。例如,我们可以使用 map 函数来对一个序列中的所有元素进行映射计算,将序列中的每个元素作为参数传递给一个函数,并返回一个新的序列,其中每个元素是原序列中对应元素经过函数映射得到的结果。例如,我们可以这样定义一个将字符串转化为大写的函数:

def upper_case(s):
    """Convert a string to upper case"""
    return s.upper()

然后可以使用 map 函数将它映射到一个字符串列表上:

names = ["Alice", "Bob", "Charlie"]
names = list(map(upper_case, names))
print(names)  # 输出 ['ALICE', 'BOB', 'CHARLIE']

Python 中还支持 Lambda 表达式,它是一种匿名函数,可以用来