当前位置: 首页 > news >正文

暑假Python基础整理 -- 函数篇

函数的创建和调用


创建一个函数

创建函数也称定义函数,可以理解为创建一个具有某种用途的工具,Python中使用 def 关键字来定义函数,具体语法如下:

def func(parameter1: type, parameter2: type = default,...) -> return_type:"""Docstrings"""func_body
  • func :函数名,调用函数时使用
  • parameter :可选参数,当没有参数时,必须保留 () ,否则将会报错。若存在多个参数,每个参数间使用 , 间隔。定义参数时可以通过 : 指定参数的类型,也通过 = 赋值的方式指定默认值。定义函数时的参数称之为形式参数,调用函数时传递的参数称之为实际参数。
  • Docstrings :可选参数,用于为函数指定注释,也称文档字符串,其内容通常是说明该函数的功能、要传递的参数的作用。
  • func_body :函数体内容

如何调用函数的Docstrings

在调用函数时,可以通过 func.__doc__ 或者 help(func) 获取。代码示例如下:

def func():"""此处为文档字符串帮助信息"""pass # 若定义函数无任何动作,则需要使用pass作为点位符或添加docstringsprint(func.__doc__)
print(help(func))
调用函数

调用函数也就是执行函数。如果把函数看作成工具,所以调用函数就是使用工具。调用函数的基本语法如下:

func(parameters)
  • func:表示已定义好的函数名称
  • parameters:可选参数,用于指定各个参数的值,若无参数,则保留 () 即可。

参数传递


形参和实参

形式参数:在定义函数时,函数名后面括号中的参数为“形式参数”。
实际参数:在调用一个函数时,函数名后面的括号中的参数为“实际参数”。

在进行值传递时,改变形式参数的值后,实际参数的值不改变;在进行引用传递时,改变形式参数的值后,实际参数的值也发生改变。

位置参数

数量必须与定义时一致:在调用函数时,指定的实际参数的数量必须与形式参数的数量一致,否则将会抛出TypeError 异常信息,提示缺少必要参数。

位置必须与定义时一致:指定的实际参数的位置必须与形式参数的位置一致,否则将会产生以下两种结果:

  • 抛出 TypeError 异常信息
  • 产生的结果与预期不符

举个实例帮助理解,首先我先定义一个函数,功能为输出姓名、年龄、身高:

def func(name: str,age: int, height: int):"""功能为输出姓名、年龄、身高参数依次为name, age, height"""print(f"当前用户的姓名是{name},年龄是{age},身高是{height}")

现在我使用位置传参调用所定义的函数(其中包含错误的调用方式示例):

name,age,height="路人甲", 18, 180
# 正确案例:
func(name,age,height)
# 错误示范1:数量不一致
func(name,age)                 # 将抛出异常
# 错误示范2:位置不一致 
func(name,height,age)          # 结果与预期不符
关键字参数

关键字参数是指使用形式参数的名字来确定输入的参数值。语法格式如下:

函数名称(形式参数名2 = 实际参数名2,形式参数名1 = 实际参数名1,...)

当使用关键字传参数时,参数的传递位置可以不用一致

为参数设置默认值

调用函数时若没指定某个参数,则程序将会报错。为解决这一问题,我们可以在定义函数时,直接指定形式参数的默认值,此时当没有输入参数时,可以直接使用定义函数时设置的默认值。示例代码如下:

def func(age: int, height: int, name: str = "路人"):"""功能为输出姓名、年龄、身高参数依次为name, age, height"""print(f"当前用户的姓名是{name},年龄是{age},身高是{height}")

此时我为name形参定义了默认值路人,所以我调用时可以不用传递name的参数,如下调用方式:

age,height=18, 180
# 正确案例
func(age,height)

在定义函数时,指定默认的形式参数必须在所有参数的末尾,否则将会产生语法错误。另外可以使用 func.__defaults__ 查看函数的默认值参数的当前值,其结果是一个元组,如上示例调用该语句,将显示 ('路人',)

可变参数

可变参数也称可变长参数,即传入函数中的实际参数可以是任意个。定义可变参数存在两种形式:

  • *parameter:表示接受任意多个实际参数并将其放到一个元组中;
  • **parameter:表示接受任意多个类似关键字参数一样显式赋值的实际参数,并将其放到一个字典中。

*parameter进行传参时,若参数对象为列表,则可以直接在列表前添加 * 作为参数传入。如下示例:

lis = [1,2,3,4,5]
func(*lis)        # func函数参数为可变参数

**parameter进行传参时,若参数对象为字典,则可以直接在字典前添加 ** 作为参数传入。如下示例:

def func(**dic):print()for key,value in dic.items():print("["+key+"]"+"的ASCII值是"+str(value))dic = {'a':97,'b':98,'c':99}
func(**dic)        # func函数参数为可变参数

也可以使用类似关键字参数一样显式赋值的实际参数进行传参,如下示例:

func(A=65,B=66,C=67)

上述两个案例的执行结果为:

[a]的ASCII值是97
[b]的ASCII值是98
[c]的ASCII值是99[A]的ASCII值是65
[B]的ASCII值是66
[C]的ASCII值是67
类型联合运算符

Python提供了一些方法可以将某些部分设置为静态,如编程时为函数参数指定某种数据类型,示例代码如下:

def func(num: int) -> int:return num**2

设置的语法格式如下所示:

def 函数名(参数: type) -> type: # 指定返回值类型

若是多种数据类型,类型之间可以使用 | 隔开

返回值


Python中在函数体内使用 return 语句为函数指定返回值。返回值类型任意,位置任意,但是当程序一旦执行至 return 语句将会立即结束函数的执行。代码示例如下:

def func(n):if n == 1:return "success"else:return "fial"func(0)  # 当这样写时func函数的返回值未被接受,该指令无效
a = func(1) # 正确写法,成功接受到函数的返回值
print(a)

变量的作用域


局部变量

局部变量是指在函数内部定义和使用的变量,它只在函数内部生效,在函数运行之前或者之后,函数内部定义的所有变量名都不存在。

全局变量

全局变量可以作用于函数的内外部。如果变量是在函数外部定义的,那么该变量称为全局变量。在函数内部定义的变量,在使用global关键字进行修饰后将变为全局变量,该变量将不受局部变量的约束,还可以在函数内部对其进行修改。语法结构为:

global 变量名

当局部变量与全局变量重名时,对函数内部的变量进行赋值后,不影响函数外部的变量。

匿名函数


匿名函数是指无名字的函数,通常情况下,该函数只是用一次。使用lambda表达式可以创建匿名函数,其语法格式如下:

result = lambda [arg1 [,arg2,...,argn]]:expression
  • result :用于调用 lambda 表达式
  • [arg1 [,arg2,...,argn]]:可选参数,用于指定要传递的参数列表
  • expression:必选参数,用于指定一个实现具体功能的表达式

lambda 参数可以存在多个,但表达式只能有一个,即只能返回一个值,而且不能出现其他非表达式语句

文章地址: 暑假Python基础整理 – 函数

http://www.dtcms.com/a/276405.html

相关文章:

  • 【6.1.2 漫画分布式事务技术选型】
  • 常用 pkill 命令速查表
  • CentOS 系统紧急恢复:从 lib64 目录崩溃到救援实战
  • vue3 canvas 选择器 Canvas 增加页面性能
  • 用FunctionCall实现文件解析(三):ChatOpenAI单例工厂
  • lnmp环境搭建
  • 使用Pycharm集成开发工具远程调试部署在虚拟机上的flask项目:超级详细的完整指南
  • springboot AOP面向切面编程
  • SpringAI实现聊天记录保存到MySQL
  • 连接池的核心接口和常用属性
  • ReentrantLock 源码解析与 AQS 扩展
  • 首次让机器人具备类人的「主动感知」能力
  • 淘宝商品评论API接口操作详解
  • oc分类和swift扩展有哪些区别
  • 火山引擎:字节跳动的技术赋能初解
  • AI智能体 | 使用Coze制作一键生成单词洗脑循环视频,一天批量生成100条视频不是梦!(附保姆级教程)
  • NW728NW733美光固态闪存NW745NW746
  • HashMap的原理
  • 技术面试问题总结二
  • 多模态大模型》多模态基础模型》多模态对齐、融合和表示
  • 关于数字签名
  • xml映射文件的方式操作mybatis
  • 集合类
  • 【2024CSP-J初赛】阅读程序(1)试题详解
  • python-while循环
  • Raft-领导者选举
  • import 和require的区别
  • python-range函数
  • jxWebUI--数据表
  • Anthropic:从OpenAI分支到AI领域的领军者