欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > Python——函数基础操作

Python——函数基础操作

2024/10/26 3:21:57 来源:https://blog.csdn.net/weixin_45720999/article/details/141558992  浏览:    关键词: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的作用域规则,可以帮助开发者编写出更加清晰、高效的代码。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com