您的位置:

Python函数调用: 利用def定义函数并调用执行特定功能

一、函数的基本概念

函数是Python中最重要的一种代码组织机制。有了函数,我们可以把程序分解成各个小模块,从而使大型程序更易于开发和维护。函数的定义具有独立性,可以在不影响程序结构或其它函数的情况下被重用。

函数的语法格式如下:

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

其中,function_name是函数名,parameters是函数的参数列表(可以为空),冒号后是函数体,函数体中语句的缩进是四个空格。函数体中如果有文档注释,要放在函数体内第一行的逻辑行。用help()函数可以查看函数帮助文档。

二、函数的参数

在Python函数中,可以使用位置参数、默认参数、可变参数和关键字参数来定义参数。在调用函数时,必须提供所有位置参数,而默认参数则可以不提供。

位置参数是按照位置顺序传递的参数。例如:

def greet(name):
    print("Hello, " + name + "!")

greet("Bob")

默认参数可以提供默认值,如果不传递参数则使用默认值。例如:

def greet(name, greeting="Hello"):
    print(greeting + ", " + name + "!")

greet("Bob")
greet("Bob", "Good morning")

可变参数可以接收任意数量的参数。例如:

def greet(*names):
    for name in names:
        print("Hello, " + name + "!")

greet("Bob", "Alice", "Charlie")

关键字参数是用于传递带有参数名的参数。例如:

def greet(**kwargs):
    for key, value in kwargs.items():
        print(key + " says " + value)

greet(Bob="Hi", Alice="Hello", Charlie="Good morning")

三、函数的返回值

函数的返回值可以使用return语句指定。如果函数没有返回值,则返回None。例如:

def add(a, b):
    return a + b

result = add(3, 4)
print(result)

当函数执行到return时,就会停止执行函数体中的其它语句并返回指定的值。例如:

def greet(name):
    if name == "Alice":
        return "Hello, Alice!"
    else:
        return "Hello, stranger!"

print(greet("Bob"))
print(greet("Alice"))

四、函数的作用域

Python中有两种作用域:全局作用域和局部作用域。全局作用域是在模块中定义的,可以被模块中的任何函数或类访问。局部作用域是在函数、方法或语句块中定义的,只能被相应的函数、方法或语句块内的代码访问。

在函数内部,可以使用global关键字来访问或修改全局变量。

x = 10

def add():
    global x
    x += 1

add()
print(x)

在函数内部,可以使用nonlocal关键字来访问或修改外层函数的变量。

def outer():
    x = 10
    def inner():
        nonlocal x
        x += 1
        print("inner x:", x)
    inner()
    print("outer x:", x)

outer()

五、函数的高级特性

在Python中,函数可以作为对象传递和调用。可以使用lambda表达式定义匿名函数。可以使用map、filter、reduce函数对序列进行操作。可以使用装饰器对函数进行增强。

使用lambda表达式定义匿名函数:

f = lambda x: x + 1
print(f(3))

使用map函数对序列进行操作:

lst = [1, 2, 3, 4]
result = map(lambda x: x*x, lst)
print(list(result))

使用filter函数对序列进行筛选:

lst = [1, 2, 3, 4]
result = filter(lambda x: x%2 == 0, lst)
print(list(result))

使用reduce函数对序列进行求积:

from functools import reduce
lst = [1, 2, 3, 4]
result = reduce(lambda x, y: x * y, lst)
print(result)

使用装饰器对函数进行增强:

def trace(func):
    def wrapper(*args, **kwargs):
        print("Calling", func.__name__)
        result = func(*args, **kwargs)
        print("Returned", result)
        return result
    return wrapper

@trace
def greet(name):
    return "Hello, " + name + "!"

print(greet("Bob"))