Python语法详解module4(函数)

在这里插入图片描述

目录

  • 一、函数基础
      • 1. 函数的概念和作用
      • 2. 函数的定义和调用
      • 3. 参数传递
  • 二、返回值和文档字符串
    • 返回值的概念和用法
      • 1. 返回值的概念
      • 2. 使用 `return` 关键字返回值:
      • 3. 多个返回值的情况:
    • 文档字符串(docstring)的作用和使用方法
      • 1. 文档字符串的作用:
      • 2. 使用方法:
      • 3. 查看文档字符串:
  • 三、局部变量和全局变量
      • 局部变量(Local Variables)
      • 全局变量(Global Variables)
      • 区别:
      • 在函数中访问全局变量:
  • 四、函数的形参、实参
      • 形参(形式参数)
      • 实参(实际参数)
      • 关系和作用
  • 五、内嵌函数
      • 内嵌函数的定义和调用
      • 内嵌函数的作用和用法
      • 注意事项

一、函数基础

1. 函数的概念和作用

在编程中,函数是一段可重复使用的代码块,它接收输入参数、执行特定任务,并返回结果。

函数的作用在于封装特定功能,使得代码更易读、更易维护,并且能够提高代码的重用性和模块化。

函数的优点包括:

  • 模块化: 将代码分割为函数可以使得程序结构更清晰,更易于理解和维护。
  • 可重用性: 可以多次调用同一个函数,避免重复编写相同的代码。
  • 简化复杂性: 通过将复杂的操作封装在函数中,可以简化主程序的逻辑结构。
  • 提高可读性: 给函数起一个具有描述性的名称可以使代码更易读懂,降低理解成本。

2. 函数的定义和调用

在 Python 中,使用 def 关键字定义函数,语法如下:

def function_name(parameters):"""文档字符串(可选)"""# 函数体statementsreturn expression  # 可选
  • function_name 是函数的名称,用于标识函数。
  • parameters 是函数的参数列表,可以包含零个或多个参数,多个参数之间用逗号分隔。
  • """文档字符串""" 是函数的文档字符串,用于描述函数的作用、参数、返回值等信息,是可选的。
  • statements 是函数的代码块,包含了实现特定功能的语句。
  • return expression 是函数的返回语句,可选的,用于返回计算结果给调用者。

函数定义完成后,可以通过函数名称和参数列表来调用函数,如下所示:

result = function_name(arguments)
  • function_name 是函数的名称。
  • arguments 是传递给函数的参数列表,可以是位置参数或关键字参数。
  • result 是函数调用的返回值,如果函数没有返回值,则返回 None

3. 参数传递

在函数调用时,可以通过参数传递数据给函数。Python 函数支持多种类型的参数传递方式,包括:

  • 位置参数: 位置参数是按照参数的位置顺序传递的,调用时参数的顺序必须与函数定义时的参数顺序相匹配。
def greet(name, message):print(f"Hello, {name}! {message}")greet("yushifu", "How are you?")
# 输出: Hello, yushifu! How are you?
  • 关键字参数: 关键字参数是按照参数名进行传递的,可以不按照参数定义的顺序传递参数。
greet(message="How are you?", name="yushifu")
# 输出: Hello, yushifu! How are you?
  • 默认参数: 默认参数在函数定义时就已经赋予了默认值,调用函数时可以不传递该参数,使用默认值。
def greet(name, message="How are you?"):print(f"Hello, {name}! {message}")greet("yushifu")
# 输出: Hello, yushifu! How are you?
  • 可变长参数: 可变长参数允许函数接受任意数量的参数。在函数定义时,使用 *args 来表示可变长位置参数,使用 **kwargs 来表示可变长关键字参数。
def calculate_sum(*args):total = 0for num in args:total += numreturn totalprint(calculate_sum(1, 2, 3, 4, 5))  # 输出: 15
def print_info(**kwargs):for key, value in kwargs.items():print(f"{key}: {value}")print_info(name="yushifu", age=23, city="Beijing")
# 输出:
# name: yushifu
# age: 23
# city: Beijing

二、返回值和文档字符串

返回值的概念和用法

在函数中,返回值是指函数执行完毕后向调用者传递的结果。

使用返回值可以将函数内部计算的结果传递给其他代码进行处理。

在 Python 中,使用 return 关键字来返回值。

1. 返回值的概念

  • 函数可以返回一个或多个值给调用者。
  • 返回值可以是任何数据类型,包括数字、字符串、列表、元组、字典等。
  • 如果函数没有明确的返回语句,它会默认返回 None

2. 使用 return 关键字返回值:

def add(a, b):result = a + breturn result  # 返回计算结果给调用者

return result 语句将计算结果 result 返回给调用者。

3. 多个返回值的情况:

def calculate(a, b):total = a + bdifference = a - breturn total, difference  # 返回多个值

return total, difference 返回了两个值,实际上返回的是一个元组 (total, difference)


文档字符串(docstring)的作用和使用方法

文档字符串是函数定义的一部分,用于描述函数的作用、参数、返回值等信息。文

档字符串被存储在函数的 __doc__ 属性中,可以通过 help() 函数或 .__doc__ 属性来查看函数的文档字符串。

1. 文档字符串的作用:

  • 帮助其他开发者理解函数的作用和用法。
  • 为函数提供简明扼要的描述,方便使用者了解函数的功能和用法。
  • 提供参数和返回值的说明,帮助使用者正确调用函数。

2. 使用方法:

def greet(name):"""输出问候语Args:name (str): 要问候的人的名字Returns:str: 包含问候语的字符串"""return f"Hello, {name}!"

在函数定义的第一行使用三重引号 """...""" 来定义文档字符串。文档字符串通常包括以下内容:

  • 函数的作用和功能描述。
  • 参数的说明,包括参数名和类型。
  • 返回值的说明,包括返回值的类型。

3. 查看文档字符串:

可以使用 help() 函数或者直接访问 .__doc__ 属性来查看函数的文档字符串。

print(help(greet))
# 或者
print(greet.__doc__)

三、局部变量和全局变量

局部变量(Local Variables)

  • 局部变量是在函数内部声明的变量,它们只能在函数内部使用,函数执行结束后就会被销毁。

  • 局部变量的作用域仅限于函数内部,外部代码无法访问局部变量。

def my_function():x = 10  # x 是局部变量print("Inside the function:", x)my_function()
# 输出: Inside the function: 10# 尝试在函数外部访问局部变量将会引发 NameError
print(x)
# 输出: NameError: name 'x' is not defined

全局变量(Global Variables)

  • 全局变量是在整个程序中声明的变量,它们可以在程序的任何地方被访问。
  • 与局部变量不同,全局变量的作用域不限于特定的函数或代码块。
y = 20  # y 是全局变量def my_function():print("Inside the function:", y)my_function()
# 输出: Inside the function: 20print("Outside the function:", y)
# 输出: Outside the function: 20

区别:

  1. 作用域:

    • 局部变量的作用域限于函数内部,只能在函数内部访问。
    • 全局变量的作用域是整个程序,可以在程序的任何地方访问。
  2. 生存周期:

    • 局部变量的生存周期仅限于函数执行期间,函数执行结束后会被销毁。
    • 全局变量的生存周期与程序的执行周期相同,只有当程序结束时才会被销毁。
  3. 访问权限:

    • 局部变量只能在声明它们的函数内部访问,外部代码无法直接访问。
    • 全局变量可以在整个程序的任何地方访问,包括函数内部和外部。

在函数中访问全局变量:

在函数内部可以访问全局变量,但如果要修改全局变量的值,则需要使用 global 关键字将其声明为全局变量。

z = 30  # z 是全局变量def my_function():global zz = 40  # 修改全局变量 z 的值print("Inside the function:", z)my_function()
# 输出: Inside the function: 40print("Outside the function:", z)
# 输出: Outside the function: 40

四、函数的形参、实参

形参(形式参数)

  • 形参是在函数定义时声明的参数,用于接收函数调用时传递的实际参数值。

  • 形参是函数定义中的占位符,其值在函数调用时由实参传递给它。

  • 形参通常用于指定函数的输入参数。

def greet(name):print("Hello,", name)# 在这个函数中,name 就是一个形参

在上面的例子中,name 是函数 greet 的形参,它用来接收调用函数时传递的实际参数值。

实参(实际参数)

  • 实参是函数调用时传递给函数的实际数值或对象,它们是真实存在的数据,用来填充函数定义中的形参。
  • 实参是函数调用时实际提供给函数的值。
greet("yushifu")# 在这个函数调用中,"yushifu" 就是一个实参

在这个例子中,“Alice” 是传递给函数 greet 的实参,它会被赋值给函数定义中的形参 name

关系和作用

  • 关系:

    • 实参是在调用函数时传递给函数的值,填充函数定义中的形参。
    • 形参是在函数定义时声明的参数,用来接收调用函数时传递的实际参数值。
  • 作用:

    • 形参用于指定函数的输入参数,在函数定义中起到接收外部数据的作用。
    • 实参用于传递真实数据给函数,在函数调用时起到向函数传递信息的作用。
def add_numbers(x, y):  # x, y 是形参sum = x + yprint("The sum is:", sum)add_numbers(3, 5)  # 3, 5 是实参# 输出: The sum is: 8

在这个例子中,xy 是函数 add_numbers 的形参,当我们调用 add_numbers(3, 5) 时,3 和 5 分别是传递给 xy 的实参,用于计算两个数的和。


五、内嵌函数

  • 内嵌函数(Nested Functions)指的是在一个函数内部定义的另一个函数。
  • 内嵌函数在外部函数内部声明,且只能在外部函数内部被调用。

内嵌函数的定义和调用

在 Python 中,可以在一个函数的内部定义另一个函数,这就是内嵌函数。内嵌函数只能在包含它的外部函数内部调用。

def outer_function():def inner_function():print("This is the inner function")inner_function()  # 在外部函数内部调用内嵌函数outer_function()
# 输出: This is the inner function

在上面的例子中,inner_function 就是 outer_function 的内嵌函数。在 outer_function 的内部,我们调用了 inner_function

内嵌函数的作用和用法

  1. 封装和隐藏: 内嵌函数可以帮助我们将一些逻辑相关的代码封装在外部函数内部,从而隐藏实现细节,使代码更加模块化和可维护。

  2. 代码复用: 内嵌函数可以在外部函数内部被重复调用,实现代码复用,避免重复编写相似的逻辑。

  3. 闭包(Closure): 内嵌函数可以形成闭包,即可以访问外部函数的局部变量,从而实现一些特殊的功能,如记忆化、延迟计算等。

  4. 限制作用域: 内嵌函数可以限制其作用域,避免与外部函数的其他部分发生命名冲突,提高代码的可维护性。

  5. 模块化设计: 使用内嵌函数可以更好地进行模块化设计,将功能逻辑划分为更小的单元,提高代码的可读性和可维护性。

注意事项

  • 内嵌函数只能在包含它的外部函数内部调用,外部函数的其他部分无法直接访问内嵌函数。
  • 内嵌函数可以访问外部函数的局部变量,形成闭包的特性。
  • 内嵌函数的作用域仅限于外部函数内部。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/23823.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大坝安全监测自动化技术的规范化设计准则

大坝安全监测自动化技术的规范化设计准则 一、施工阶段自动化系统设计要点 在施工阶段,大坝安全监测自动化系统的设计应当涵盖以下几个核心内容: 监测仪器的布局规划及详细的施工图纸设计。 配套土建项目以及防雷设施的施工设计规划。 明确施工过程中的技…

Jenkins工作流程原理

持续集成:自动部署打包发布代码 Jenkins工作流程 项目已经基于Jenkins实现了持续集成,每当我们push代码时,就会触发项目完成自动编译和打包。而需要运行某个微服务时,我们只需要经过两步: 第一步,访问je…

win10下,python3.7安装xlrd和xlwt

win10下,执行import xlwt,结果报错 No module named xlwt。 原因:使用的python没有安装xlwt包。 解决方法: 1)打开一个命令窗口,执行:where python,可以看到使用的python路径及版…

2024年SQL Editor趋势

SQL Editor已经超越了仅仅执行查询的传统角色,成为提升生产力、协作和数据管理的综合平台。这一演变反映了QA软件测试人员和开发人员日益增长的需求和复杂需求。让我们深入探讨当前的趋势,强调这些变化如何满足用户的基本需求。 1.增强的协作功能 现代S…

Questflow借助MongoDB Atlas以AI重新定义未来工作方式

MongoDB客户案例导读 Questflow借助MongoDB Atlas赋能AI员工,助力中小型初创企业自动化工作流程,简化数据分析,提升客户体验,推动AI与员工的协作,重新定义未来工作方式。 协作式AI自动化平台 无需编码即可拥有自己的…

动态规划(多重背包问题+二进制优化)

引言 多重背包,相对于01背包来说,多重背包是每个物品会有相应的个数,最多可以选那么多个,因而对于朴素多重背包,需要在01背包的基础上,再加一层物品的循环 朴素多重背包例题 P2347 [NOIP1996 提高组] 砝…

【因果推断python】19_局部平均效应2

目录 局部平均干预效果:后期 对参与度的影响 关键思想 局部平均干预效果:后期 局部平均处理效应明确了我们可以估计因果效应的人群。这也是查看 IV 的另一种方式,它提供了我们可以使用的其他很酷的直觉。在现代 IV 中,我们将工…

Codeforces Round 951 (Div. 2) C、D(构造、线段树)

1979C - Earning on Bets 构造题:观察到k范围很小,首先考虑最终硬币总数可以是多少,我们可以先假设最终的硬币总数为所有k取值的最小公倍数,这样只需要满足每个结果添加1枚硬币即可赚到硬币。 // Problem: C. Earning on Bets //…

《Kubernetes部署篇:基于Kylin V10+ARM64架构CPU+containerd一键离线部署容器版K8S1.26.15高可用集群》

总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:企业级K8s集群运维实战 一、部署背景 由于业务系统的特殊性,我们需要针对不同的客户环境部署基于containerd容器版 K8S 1.26.15集群&…

备份和恢复realme智能手机:综合指南

realme自2018年成立至今,一直秉持着“敢于超越”的品牌精神,专注于为全球年轻用户提供性能卓越、设计新颖的高品质手机。对于如何备份和恢复realme手机,本文将介绍多种不同的方法。 第1部分:使用Coolmuster Android Backup Mana…

用 OpenCV 实现图像中水平线检测与校正

前言 在本文中,我们将探讨如何使用 Python 和 OpenCV 库来检测图像中的水平线,并对图像进行旋转校正以使这些线条水平。这种技术可广泛应用于文档扫描、建筑摄影校正以及机器视觉中的各种场景。 环境准备 首先,确保您的环境中安装了 OpenC…

【RAG提升技巧】查询改写HyDE

简介 提高 RAG 推理能力的一个好方法是添加查询理解层 ——在实际查询向量存储之前添加查询转换。以下是四种不同的查询转换: 路由:保留初始查询,同时查明其所属的适当工具子集。然后,将这些工具指定为合适的选项。查询重写&…

随身WIFI修改MAC(bssid)并接收短信

将SIM卡插入随身WiFi卡槽 将随身WIFI插入电脑 打开 http://ufi.icewifi.com ,输入设备IMEI (或直接扫描设备包装盒上的二维码) 点击“确认” 登录到设备主页(网址可收藏保存) 点击“WIFI配置”按钮,输入想…

C#——枚举类型详情

枚举类型 枚举类型(也可以称为“枚举器”)由一组具有独立标识符(名称)的整数类型常量构成,在 C# 中枚举类型不仅可以在类或结构体的内部声明,也可以在类或结构体的外部声明,默认情况下枚举类型…

【Python报错】已解决AttributeError: Nonetype Object Has NoAttribute Group

解决Python报错:AttributeError: ‘list’ object has no attribute ‘get’ 在Python中,AttributeError通常表示你试图访问的对象没有你请求的属性或方法。如果你遇到了AttributeError: list object has no attribute get的错误,这通常意味着…

【NoSQL数据库】Redis——哨兵模式

Redis——哨兵模式 Redis哨兵 Redis——哨兵模式1.什么是哨兵机制(Redis Sentinel)1.1 哨兵的作用 2.哨兵的运行机制3.故障处理redis常见问题汇总1、redis缓存击穿是什么?如何解决?2、redis缓存穿透是什么?如何解决&am…

如何查询公网IP?

在互联网中,每个设备都有一个唯一的公网IP地址,用于标识设备在全球范围内的位置。查询公网IP是一个常见的需求,无论是用于远程访问、网络配置还是其他目的,了解自己的公网IP地址都是很有必要的。本文将介绍几种常见的方法来查询公…

HQChart使用教程100-自定义Y轴分段背景色

HQChart使用教程100-自定义Y轴分段背景色 效果图步骤1. 注册Y轴自定义刻度创建事件2. 配置Y轴背景色eventdataobj示例 交流QQ群HQChart代码地址 效果图 步骤 1. 注册Y轴自定义刻度创建事件 事件IDSCHART_EVENT_ID.ON_CREATE_CUSTOM_Y_COORDINATE, 如何注册事件详见教程 HQCh…

代码审计(1):CVE-2022-4957分析及复现

0x00漏洞描述: ѕрееdtеѕt iѕ а vеrу liɡhtԝеiɡht nеtԝоrk ѕрееd tеѕtinɡ tооl imрlеmеntеd in Jаvаѕсriрt. Thеrе iѕ а Crоѕѕ-ѕitе Sсriрtinɡ vulnеrаbilitу in librеѕроndеd ѕрееdtеѕt…

[word] word2019中制表符的妙用 #媒体#笔记#知识分享

word2019中制表符的妙用 word2019表格功能是非常强大的,很多朋友都认为以前的制表符已经没有什么用途了,其实不然,在一切特殊的场合,word2019制表符还是非常有用的,下面就为大家介绍word2019中制表符的妙用。 步骤1、…