STLG_05_04_Python - 函数

        Python函数是一种可重用的代码块,用于执行特定任务。它通过def关键字定义,可以接受参数作为输入,并通过return语句返回值。函数能够提高代码的模块化和可读性,方便维护和调试。无论是内置函数还是自定义函数,它们都是Python编程中实现功能和逻辑的重要工具。

1. 函数的定义和调用

1.1 函数的定义

在Python中,函数是一段可重复使用的代码块,用于执行特定的任务。函数可以帮助我们将代码模块化,提高代码的可读性和可维护性。

函数的定义使用def关键字,基本语法如下:

def 函数名(参数列表):
    函数体
    return 返回值

  • 函数名:函数名是函数的标识符,命名时应遵循Python的命名规范(如使用小写字母和下划线)。
  • 参数列表:参数列表是函数的输入,用于接收调用函数时传递的值。参数可以是零个或多个。
  • 函数体:函数体是函数的核心部分,包含实现特定功能的代码。
  • return语句return语句用于返回函数的执行结果。如果函数不需要返回值,可以省略return语句。

例如,定义一个简单的函数say_hello,用于输出"Hello, World!":

def say_hello():
    print("Hello, World!")

在这个例子中,say_hello函数没有参数,函数体中只有一行代码,用于输出"Hello, World!"。

1.2 函数的调用

定义好函数后,可以通过函数名来调用函数。调用时不需要再使用def关键字。调用函数的语法如下:

函数名(参数列表)

例如,调用上面定义的say_hello函数:

say_hello()

输出结果为:

Hello, World!

调用函数时,Python会执行函数体中的代码,并返回结果(如果有)。

2. 参数传递

在Python中,函数可以接受参数,参数是函数与外部交互的方式之一。参数可以是位置参数、关键字参数或两者结合。

2.1 位置参数

位置参数是函数定义中最常见的参数形式。调用函数时,传递的参数按照位置顺序依次赋值给函数定义中的参数。

例如,定义一个函数greet,接受两个位置参数namemessage

def greet(name, message):
    print(f"{message}, {name}!")

调用函数时,必须按照定义时的顺序传递参数:

greet("Alice", "Hello")

输出结果为:

Hello, Alice!

在这个例子中,"Alice"被赋值给name"Hello"被赋值给message

2.2 关键字参数

关键字参数允许在调用函数时,通过参数名来传递值,这样就不必严格按照位置顺序传递参数。

例如,调用greet函数时,可以使用关键字参数:

greet(message="Hi", name="Bob")

输出结果为:

Hi, Bob!

在这个例子中,参数messagename通过关键字的方式传递,顺序可以任意。

2.3 混合使用位置参数和关键字参数

在调用函数时,可以同时使用位置参数和关键字参数,但位置参数必须放在关键字参数之前。

例如:

greet("Charlie", message="Hola")

输出结果为:

Hola, Charlie!

在这个例子中,"Charlie"是位置参数,message="Hola"是关键字参数。

3. 默认参数

默认参数是指在函数定义时为参数指定默认值。如果在调用函数时没有传递该参数,则使用默认值。

例如,定义一个函数greet_default,为message参数指定默认值"Hello"

def greet_default(name, message="Hello"):
    print(f"{message}, {name}!")

调用函数时,如果不传递message参数,则使用默认值"Hello"

greet_default("David")

输出结果为:

Hello, David!

如果传递了message参数,则使用传递的值:

greet_default("Eve", "Hi")

输出结果为:

Hi, Eve!

3.1 注意事项

  • 默认参数必须放在非默认参数的后面。例如,不能将message参数放在name参数之前。
  • 默认参数的值在函数定义时就已经确定,而不是在函数调用时。如果默认参数是一个可变对象(如列表或字典),可能会导致意外行为。

4. 可变参数

有时我们希望函数能够接受任意数量的参数,这时可以使用可变参数。Python提供了两种可变参数:可变位置参数和可变关键字参数。

4.1 可变位置参数(*args)

可变位置参数允许函数接受任意数量的位置参数,这些参数会被打包成一个元组。在函数定义时,使用*args来表示可变位置参数。

例如,定义一个函数sum_numbers,用于计算任意数量数字的和:

def sum_numbers(*args):
    total = 0
    for num in args:
        total += num
    return total

调用函数时,可以传递任意数量的参数:

result = sum_numbers(1, 2, 3, 4)
print(result)  # 输出: 10

在这个例子中,1, 2, 3, 4被传递给*args,函数内部将它们作为元组处理。

4.2 可变关键字参数(**kwargs)

可变关键字参数允许函数接受任意数量的关键字参数,这些参数会被打包成一个字典。在函数定义时,使用**kwargs来表示可变关键字参数。

例如,定义一个函数print_info,用于打印任意数量的键值对:

def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

调用函数时,可以传递任意数量的关键字参数:

print_info(name="Alice", age=30, city="New York")

输出结果为:

name: Alice
age: 30
city: New York

在这个例子中,name="Alice", age=30, city="New York"被传递给**kwargs,函数内部将它们作为字典处理。

4.3 混合使用可变参数

在函数定义时,可以同时使用*args**kwargs

例如,定义一个函数print_all_info,既可以接受任意数量的位置参数,也可以接受任意数量的关键字参数:

def print_all_info(*args, **kwargs):
    for arg in args:
        print(arg)
    for key, value in kwargs.items():
        print(f"{key}: {value}")

调用函数时,可以同时传递位置参数和关键字参数:

print_all_info(1, 2, 3, name="Bob", age=25)

输出结果为:

1
2
3
name: Bob
age: 25

在这个例子中,1, 2, 3被传递给*argsname="Bob", age=25被传递给**kwargs

5. 返回值

函数可以使用return语句返回一个值。如果没有显式地使用return语句,函数默认返回None

例如,定义一个函数add,用于计算两个数的和:

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

调用函数时,可以获取返回值:

result = add(3, 5)
print(result)  # 输出: 8

在这个例子中,add函数返回a + b的结果,即8

5.1 返回多个值

Python的return语句可以返回多个值,这些值会被打包成一个元组返回。

例如,定义一个函数get_info,返回姓名、年龄和城市:

def get_info():
    return "Alice", 30, "New York"

调用函数时,可以解包返回的元组:

name, age, city = get_info()
print(name, age, city)  # 输出: Alice 30 New York

在这个例子中,get_info函数返回一个包含三个值的元组,调用时将它们分别赋值给nameagecity

6. 匿名函数(Lambda函数)

匿名函数是一种不需要使用def关键字定义的简单函数,通常用于需要一个简单函数的场景。匿名函数使用lambda关键字来定义。

例如,定义一个匿名函数add,用于计算两个数的和:

add = lambda x, y: x + y
result = add(3, 5)
print(result)  # 输出: 8

在这个例子中,lambda x, y: x + y定义了一个匿名函数,add(3, 5)调用该函数并返回结果8

6.1 使用场景

匿名函数通常用于需要传递函数作为参数的场景,例如mapfilter等函数的参数。

例如,使用map函数将列表中的每个元素平方:

numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers))
print(squared)  # 输出: [1, 4, 9, 16, 25]

在这个例子中,lambda x: x**2定义了一个匿名函数,map函数将该函数应用于numbers列表中的每个元素,返回一个包含平方值的列表。

你可能感兴趣的:(开发语言,前端,笔记,python)