Python——函数基础操作

创建和调用函数

在Python中,创建和调用函数是一种组织代码以执行重复任务的有效方式。下面将详细介绍如何创建和调用函数。

创建函数

在Python中,你可以使用def关键字来定义一个函数。定义函数的一般语法如下:

def 函数名(参数列表):  
    """  
    函数文档字符串  
    """  
    # 函数体  
    return 返回值
  • 函数名:你选择的名称,用于调用函数。
  • 参数列表:传递给函数的值。参数是可选的,如果函数不需要任何输入,参数列表可以为空。
  • 函数体:包含执行特定任务的语句。
  • 返回值:函数可以返回一个值给调用者。return语句是可选的,如果没有return语句,函数将隐式返回None

调用函数

定义函数后,你可以通过函数名和参数列表(如果函数需要参数)来调用它。

示例

下面是一个简单的示例,展示了如何创建和调用一个函数。

# 定义一个函数  
def greet(name):  
    """  
    向用户问好  
      
    参数:  
    name -- 用户的名字  
      
    返回:  
    无  
    """  
    print(f"Hello, {name}!")  
  
# 调用函数  
greet("Alice")  # 输出: Hello, Alice!  
greet("Bob")    # 输出: Hello, Bob!

在这个例子中,我们定义了一个名为greet的函数,它接受一个参数name。函数体打印一条包含用户名字的问候语。然后,我们通过传入不同的名字来调用这个函数,并看到相应的输出。

带返回值的函数

下面是一个带返回值的函数示例:

# 定义一个带返回值的函数  
def add_numbers(a, b):  
    """  
    计算两个数的和  
      
    参数:  
    a -- 第一个加数  
    b -- 第二个加数  
      
    返回:  
    两个数的和  
    """  
    return a + b  
  
# 调用函数并接收返回值  
result = add_numbers(5, 3)  
print(result)  # 输出: 8

在这个例子中,add_numbers函数计算两个数的和,并通过return语句返回结果。然后,我们调用这个函数,并使用变量result来接收返回的值。最后,我们打印这个值。

函数的参数

在Python中,函数参数是传递给函数的值或变量名,它们在函数体内被使用以执行特定的任务。Python函数参数可以分为几种类型,包括位置参数(必需参数)、关键字参数、默认参数、可变参数(*args)和关键字可变参数(**kwargs)。

1. 位置参数(必需参数)

位置参数是函数定义时声明的参数,这些参数在调用函数时必须按位置顺序提供值。

def greet(name, greeting):  
    print(f"{greeting}, {name}!")  
  
# 调用时,需要按顺序提供参数值  
greet("Alice", "Hello")  # 正确  
# greet("Hello", "Alice")  # 错误,因为顺序不对

2. 关键字参数

关键字参数是在调用函数时,通过参数名(关键字)来指定参数值的参数。这种方式可以使得函数调用更加清晰,并且参数顺序可以不必与函数定义时相同。

def greet(name, greeting):  
    print(f"{greeting}, {name}!")  
  
# 使用关键字参数  
greet(name="Alice", greeting="Hello")  # 正确,且顺序不影响

3. 默认参数

默认参数是在函数定义时就已经为参数指定了默认值的参数。如果在调用函数时没有为这些参数提供值,那么就会使用默认值。

def greet(name, greeting="Hello"):  
    print(f"{greeting}, {name}!")  
  
# 调用时,只提供了name参数的值  
greet("Alice")  # 输出: Hello, Alice!

4. 可变参数(*args

*args用于将不定数量的非关键字参数传递给函数。在函数内部,args会被当作一个元组(tuple)处理。

def greet(*names):  
    for name in names:  
        print(f"Hello, {name}!")  
  
# 调用时,可以传入任意数量的参数  
greet("Alice", "Bob", "Charlie")

5. 关键字可变参数(**kwargs

**kwargs用于将不定数量的关键字参数传递给函数。在函数内部,kwargs会被当作一个字典(dict)处理。

def greet(**kwargs):  
    for key, value in kwargs.items():  
        print(f"{key}: {value}")  
  
# 调用时,可以传入任意数量的关键字参数  
greet(name="Alice", greeting="Hello", age=30)

结合使用

这些参数类型可以在同一个函数中结合使用,但需要注意它们的顺序:位置参数、默认参数、*args**kwargs

def greet(name, greeting="Hello", *other_names, **extra_info):  
    print(f"{greeting}, {name}!")  
    for name in other_names:  
        print(f"Also, {greeting}, {name}!")  
    for key, value in extra_info.items():  
        print(f"{key}: {value}")  
  
greet("Alice", "Hi", "Bob", "Charlie", age=30, city="New York")

在这个例子中,greet函数结合了位置参数、默认参数、可变参数(*args)和关键字可变参数(**kwargs)。

注意

  • 在调用函数时,可以混合使用位置参数和关键字参数,但关键字参数必须放在位置参数之后。
  • 对于位置参数,它们的顺序很重要。调用函数时,必须按照函数定义中声明的顺序提供参数值。
  • 如果函数有默认值参数,那么这些参数应该放在位置参数列表的末尾。

参数中的 / 符号

在Python中,函数参数列表中的 符号是一个相对较新的特性,它用于区分位置参数和关键字参数。这个特性是在Python 3.8版本中引入的,旨在提高函数定义的清晰度,并允许开发者更好地控制参数的使用方式。

当你在函数定义中使用 时,它后面的所有参数都被视为位置参数,即使它们在调用时使用了关键字。但是,在 之后定义的任何参数(不包括*args**kwargs)都必须是关键字参数。这意味着,在调用函数时,你不能通过位置来传递这些参数,而必须使用它们的名字。

变量的作用域

Python中的变量作用域是指变量在程序中可被访问的区域。理解变量的作用域对于编写清晰、可维护的Python代码至关重要。Python中有几种不同的作用域,主要包括:

局部作用域(Local Scope)

  1. 局部作用域是函数或方法内部定义变量的作用域。局部变量仅在其被定义的函数或方法内部可见和可访问。
  2. 当函数执行完毕时,局部变量会被销毁,除非它被返回或存储在一个全局变量中。
def local_scope_function():  
    local_var = "I am local"  
    print(local_var)  # 输出: I am local  
  
local_scope_function()  
# 尝试在函数外部访问局部变量会报错  
# print(local_var)  # NameError: name 'local_var' is not defined

全局作用域(Global Scope)

  1. 全局作用域是模块级别的作用域,即整个模块(Python文件)内都可以访问的变量。
  2. 在模块级别定义的变量具有全局作用域。在函数内部,可以通过global关键字声明变量为全局变量来访问和修改全局作用域中的变量。
global_var = "I am global"  
  
def global_scope_function():  
    print(global_var)  # 输出: I am global  
  
global_scope_function()  
print(global_var)  # 输出: I am global  
  
# 修改全局变量需要在函数内部使用global关键字  
def modify_global_variable():  
    global global_var  
    global_var = "Modified global"  
  
modify_global_variable()  
print(global_var)  # 输出: Modified global

内建作用域(Built-in Scope)

  1. 内建作用域是Python的内置函数和变量的作用域。这些变量和函数在Python解释器启动时就已经定义好了,并且在整个程序中都是可用的。
  2. 例如,len()print()str()等内置函数,以及NoneTrueFalse等内置变量。
# 使用内置作用域中的len函数  
my_list = [1, 2, 3]  
print(len(my_list))  # 输出: 3  
  
# 尝试修改内置变量(这是不允许的,仅作为示例说明其不可变性)  
# 注意:实际中不应尝试修改内置变量,这里只是说明其不可变性  
# try:  
#     print = 100  # 这会抛出TypeError,因为print是内置函数,不能被重新赋值  
# except TypeError as e:  
#     print(e)  # 示例中不实际执行,仅说明概念

​​​​​​​封闭作用域(Enclosing Scope 或 Nonlocal Scope)

  1. 封闭作用域也称为嵌套作用域或非本地作用域,是指在一个函数内部定义了另一个函数,内层函数可以访问外层函数的变量。
  2. 可以通过nonlocal关键字声明变量,以在内层函数中访问并修改外层函数的局部变量。
def enclosing_scope_function():  
    outer_var = "I am outer"  
      
    def nested_function():  
        nonlocal outer_var  
        outer_var = "Modified outer"  
        print(outer_var)  # 输出: Modified outer  
      
    nested_function()  
    print(outer_var)  # 输出: Modified outer  
  
enclosing_scope_function()

作用域查找规则(LEGB 规则)

  • 当Python查找一个变量的引用时,它会按照以下顺序查找变量:
    1. Local(局部作用域):首先在当前函数或方法的局部作用域中查找。
    2. Enclosing(封闭作用域):如果在局部作用域中未找到,Python会在任何封闭的作用域中继续查找。
    3. Global(全局作用域):如果在封闭作用域中也未找到,Python会在全局作用域中查找。
    4. Built-in(内建作用域):如果全局作用域中也未找到,最后会在内建作用域中查找。

了解并正确运用Python的作用域规则,可以帮助开发者编写出更加清晰、高效的代码。

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
基于Python的计算思维训练主要涉及到函数的概念。函数Python中的基本编程结构,通过函数可以将一系列操作封装起来,提高代码的复用性和可维护性。 首先,函数的定义和调用是计算思维中重要的一部分。学习者需要理解如何使用def关键字定义函数,并且学会传入参数和返回数值。这能够帮助他们将复杂的问题拆分成更小的部分,然后再分别解决。 其次,函数的参数和返回值的运用是培养计算思维的有效途径。学习者需要理解函数的参数可以是任意类型的数据,也可以是默认值,还可以是可变数量的参数。同时,他们需要掌握函数可以返回单个数值、多个数值或者其他函数的能力。 此外,函数的嵌套和递归是培养计算思维的重要方法。学习者需要了解函数可以在其内部调用其他函数,从而实现更复杂的功能。而递归则可以帮助他们理解问题的分治和循环求解策略。 最后,函数的高阶用法和闭包也是培养计算思维的关键。学习者需要明白函数可以作为参数传递给其他函数,也可以作为返回值被另一个函数使用。此外,他们还需要掌握闭包的概念和运用,以便更好地理解函数的作用域和生命周期。 通过学习和实践以上内容,学习者不仅可以掌握Python函数的用法,还可以培养出较强的计算思维能力,从而更好地应对复杂的问题和挑战。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hardStudy_h

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值