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

【Python基础】函数使用实战操作详解

目录

一、前言

二、Python 函数介绍

2.1 什么是函数

2.2 函数结构

三、函数基本使用

3.1 函数定义

3.2 函数如何调用

3.3 带参数的函数

3.4 函数默认参数

3.5 关键字参数

3.6 位置参数与关键字参数对比

3.7 可变参数(*args 和 **kwargs)

3.8 函数返回值

3.8.1 返回值return 说明

3.8.2 函数返回值特点

3.9 函数作用域

3.10 函数说明文档

3.11 函数的参数类型

3.12 匿名函数

3.12.1 什么是匿名函数

3.12.2 匿名函数特点

3.12.3 匿名函数基本语法

3.12.4 匿名函数带参数

3.12.5 匿名函数与其他内置函数结合使用

四、写在最后


一、前言

在日常项目开发中,函数(方法)可以说无处不在,使用函数可以为项目的开发带来很多好处,让工程代码变得可维护性更好,本篇将详细介绍一下Python中的函数使用。

二、Python 函数介绍

2.1 什么是函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。

2.2 函数结构

在pythno 中,一个完整的函数结构如下:

在自定义函数时,可以参考下面的原则:

  • 函数代码块以def关键词开头,后接函数标识符名称和圆括号()

  • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。

  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。

  • 函数内容以冒号:起始,并且缩进。

  • return [表达式]结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。

三、函数基本使用

3.1 函数定义

Python 定义函数使用 def 关键字,一般格式如下:

  • 默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的

def 函数名(参数列表): """文档字符串(可选)""" 函数体 return 返回值 # 可选

如下定义一个基本的函数并调用:

def hello() : print("Hello World!") hello() def greet(): """向指定的人打招呼""" return "Hello!" print(greet())

输出结果:

3.2 函数如何调用

定义一个函数:给了函数一个名称,指定了函数里包含的参数,和代码块结构。

这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从 Python 命令提示符执行。

如下实例调用了printme()函数:

# 定义函数 def printme( str ): # 打印任何传入的字符串 print (str) return # 调用函数 printme("我要调用用户自定义函数!") printme("再次调用同一函数")

注意事项:

  • 函数必须先定义,在调用

  • 函数定义时,并不会执行,只有在调用函数时,函数体的逻辑才会运行

  • 函数中通过缩进来描述归属关系

3.3 带参数的函数

在真实的项目开发场景下,函数使用时一般会带上参数,默认情况下,带有参数的函数在调用时按顺序传入,下面这个函数,比较两个数的大小并输出

def max(a, b): if a > b: return a else: return b a = 11 b = 21 print(max(a, b))

3.4 函数默认参数

给参数设定一个默认值,外部调用时可省略这个默认参数:

  • 注意:默认参数必须是不可变对象(如None、数字、字符串),不要用列表/字典,否则会有坑

  • 默认参数必须放在没有默认值的参数列表的后面,一个函数在定义时是可以设置多个默认参数的

  • 函数调用时,如果为默认参数传递了值,则会修改默认的参数值;如果没有传递该参数,则直接使用默认值

def power(base, exp=2): return base ** exp print(power(3)) print(power(3, 3))

3.5 关键字参数

调用函数时指定参数名,顺序可任意,这种比较灵活:

  • 调用函数时,通过"形参名=值"的形式传递参数,顺序没有要求

  • 如果同时存在位置参数与关键字参数,位置参数在前,关键字参数在后

def info(name, age): return f"{name} is {age} years old" print(info(age=25, name="Bob"))

当然也可以混用,参考下面的案例

def reg_stu(name, age,gender, city): print(f"注册成功,姓名:{name},年龄:{age},性别:{gender},城市:{city}") return {"name": name, "age": age, "gender": gender, "city": city} #传参方式一:位置参数 stu = reg_stu("张三",18,"男","北京") print(stu) #传参方式二:关键字参数 stu = reg_stu(name="王林",age=28,gender="男",city="北京") print(stu) stu = reg_stu(age=20, gender="女", city="北京", name="李慕婉") print(stu) # 传参方式三:位置参数+关键字参数--->位置参数在前,关键字参数在后 stu = reg_stu("李慕婉", 20, gender="女", city="北京") print(stu)

3.6 位置参数与关键字参数对比

两者对比与适用场景:

  • 一切以代码结构清晰明了(可读性)、便于维护(维护性)为目标

  • 如果参数比较少(不超过3个),可直接使用位置参数

  • 如果参数数量较多,建议使用关键字参数

3.7 可变参数(*args 和 **kwargs)

也叫不定长参数或者可变参数,用于函数定义及调用时参数个数不确定(0个或多个)的场景

  • *args:接收任意数量的位置参数,打包成元组

  • **kwargs:接收任意数量的关键字参数,打包成字典

  • 传递的所有匹配的位置参数都会被args变量收集,这些参数会合并封装为一个元组,args是元组类型(注意并不会封装关键字参数)

  • args只是约定俗成的变量名,并不是关键字,这里可以使用任何合法的变量名(如*data)

def sum_all(*args): return sum(args) print(sum_all(1,2,3,4)) # 10 print() def show_info(**kwargs): for k, v in kwargs.items(): print(f"{k}: {v}") print(show_info(name="Tom", city="Beijing"))

如果是不定长参数与关键字参数一起使用,使用形式如下

注意:

  • 参数是以"键=值"形式传递的关键字参数,这些"键=值"参数都会被kwargs接受,并合并封装为一个字典类型

  • kwargs只是约定俗成的变量名,并不是关键字,这里可以使用任何合法的变量名(如 **options)

3.8 函数返回值

在很多情况下,在工程中定义函数的时候是需要返回值的。

3.8.1 返回值return 说明

return [表达式]语句用于退出函数,选择性地向调用方返回一个表达式。不带参数值的 return 语句返回 None。之前的例子都没有示范如何返回数值,以下实例演示了 return 语句的用法:

# 可写函数说明 def sum( arg1, arg2 ): # 返回2个参数的和." total = arg1 + arg2 print ("函数内 : ", total) return total # 调用sum函数 total = sum( 10, 20 ) print ("函数外 : ", total)

运行结果:

3.8.2 函数返回值特点

对函数返回值来说,具有如下特点:

  • 使用return返回结果,可以返回任意类型(数字、字符串、列表、函数等)。

  • 没有return或只写return,函数返回None

  • 可以返回多个值(实际是返回一个元组):

在下面的函数中,入参是一个列表

def get_min_max(lst): return min(lst), max(lst) a, b = get_min_max([1,5,3]) # a=1, b=5 print(a,b)

运行结果如下:

注意:

  • return语句只有返回功能,而没有输出打印的功能,如果要输出,需要结合print()函数来实现

  • 函数可以有多个返回值,多个返回值最终封装到元组中

3.9 函数作用域

变量的作用域指的是变量的作用范围(标识这个变量在哪里可以使用,在哪儿不可以使用)。

基本特点:

  • 局部变量:在函数内部定义的变量,称之为局部变量,只能在该函数内部使用,外部无法访问(函数执行完毕后,会自动销毁其内部局部变量)

  • 全局变量:在函数之外定义的变量,称之为全局变量,在整个文件中(包括函数内)都可以使用(通常定义在文件的顶部)

比如在下面的函数中,x是一个全局变量,函数内部和外部都可以访问

x = 10 print(x) def change(): global x x = 20 change() print(x) # 20

运行结果:

注意事项:

  • 尽量避免在函数中使用全局变量,因为会使代码难以维护和调试

  • 考虑使用函数参数和返回值来传递数据,而不是依赖全局变量

  • global主要用在程序的状态、配置和计数器等场景中

3.10 函数说明文档

函数的说明文档(Docstring)是写在函数开头,用三个引号包裹的字符串,用于解释函数的功能、参数、返回值等信息,方便调用者清楚函数的具体作用及细节。

定义一个带说明的函数

def rec(l,r): """ 根据长度和宽度,计算长方形面积 :param l: 长 :param r: 宽 :return: """ return l * r help(rec)

当执行的时候,就可以把这个函数的作用输出出来

3.11 函数的参数类型

函数支持的普通参数包括:数字、布尔、字符串、列表、元组、集合、字典等。也支持特殊的参数:函数,即函数也可以作为参数传入。

在下面的演示代码中,既有普通函数的参数传递,也有函数作为参数的传递

def circle_area(r): area = 3.14 * r ** 2 return area print(circle_area(5)) def calc_score(score_list): min_s = min(score_list) max_s = max(score_list) avg_s = round(sum(score_list) / len(score_list), 1) return max_s, min_s, avg_s s_list = [589, 609, 605, 643, 677, 455, 477, 489, 503] max_score, min_score, avg_score = calc_score(s_list) def add (x, y): return x + y def subtract (x, y): return x - y def calc(x,y,oper): return oper(x,y) result = calc(10, 20, add) print(result)

函数作为参数传递的一个典型场景就是递归,如下:

def cal(n): if n ==1: return 1 else: return n * cal(n-1) res = cal(5) print(res)

3.12 匿名函数

3.12.1 什么是匿名函数

Python 中使用lambda来创建匿名函数。

  • lambda 函数是一种小型、匿名的、内联函数,它可以具有任意数量的参数,但只能有一个表达式。

  • 匿名函数不需要使用def关键字定义完整函数。

  • lambda 函数通常用于编写简单的、单行的函数,通常在需要函数作为参数传递的情况下使用,例如在 map()、filter()、reduce() 等函数中。

3.12.2 匿名函数特点

lambda函数特点:

  • lambda 函数是匿名的,它们没有函数名称,只能通过赋值给变量或作为参数传递给其他函数来使用。

  • lambda 函数通常只包含一行代码,这使得它们适用于编写简单的函数。

  • 匿名函数中可以返回结果,也可以不返回结果。返回结果时,不需要写return,表达式的运行结果就是要返回的结果。

3.12.3 匿名函数基本语法

lambda 基本格式如下:

lambda arguments: expression

参数解释:

  • lambda是 Python 的关键字,用于定义 lambda 函数。

  • arguments是参数列表,可以包含零个或多个参数,但必须在冒号(:)前指定。

  • expression是一个表达式,用于计算并返回函数的结果。

下面这个 lambda 函数没有参数:

f = lambda: "Hello, world!" print(f()) # 输出: Hello, world!

3.12.4 匿名函数带参数

带参数的匿名函数更常见,以下实例使用 lambda 创建匿名函数,设置一个函数参数 a,函数计算参数 a 加 10,并返回结果:

x = lambda a : a + 10 print(x(5))

lambda 函数也可以设置多个参数,参数使用逗号,隔开:

以下实例使用 lambda 创建匿名函数,函数参数 a 与 b 相乘,并返回结果:

x = lambda a, b : a * b print(x(5, 6))

以下实例使用 lambda 创建匿名函数,函数参数 a、b 与 c 相加,并返回结果:

x = lambda a, b, c : a + b + c print(x(5, 6, 2))

3.12.5 匿名函数与其他内置函数结合使用

lambda 函数通常与内置函数如 map()、filter() 和 reduce() 一起使用,以便在集合上执行操作。如下:

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

使用 lambda 函数与 filter() 一起,筛选偶数:

numbers = [1, 2, 3, 4, 5, 6, 7, 8] even_numbers = list(filter(lambda x: x % 2 == 0, numbers)) print(even_numbers) # 输出:[2, 4, 6, 8]

下面是一个使用 reduce() 和 lambda 表达式演示如何计算一个序列的累积乘积:

from functools import reduce numbers = [1, 2, 3, 4, 5] # 使用 reduce() 和 lambda 函数计算乘积 product = reduce(lambda x, y: x * y, numbers) print(product) # 输出:120

在上面的实例中,reduce() 函数通过遍历 numbers 列表,并使用 lambda 函数将累积的结果不断更新,最终得到了1 * 2 * 3 * 4 * 5 = 120的结果。

补充:什么时候使用匿名函数

  • 建议使用匿名函数的情况:函数逻辑简单,只在一个地方调用(常作为高阶函数的参数)

  • 建议使用命名函数的情况:函数逻辑复杂,需要多步操作,需要多个地方重复使用或需要加文档说明的场景

四、写在最后

本文通过较大的篇幅详细介绍了Python中函数的使用,希望对看到的同学有帮助,本篇到此结束,感谢观看。

http://www.jsqmd.com/news/1360125/

相关文章:

  • 财税销售想创业怎么把个人资源变成公司资产,五步沉淀法 - 欢欢在创业
  • CPCL(Compressed Print Control Language)
  • 组件库改版怕截图标不清?用 Storybook 搭本地组件预览页,再借 cpolar 给前端和测试临时验收
  • 2026广东新中式家具厂家推荐,坚守精工制造初心以东方美学匠心打造品质家居 - 品牌商讯
  • 天津水冷机组维保-欧米到家10年经验师傅30分钟极速上门检修|故障检修 | 定期保养 | 配件更换 | 清洗维护| 报价公开透明一站式服务
  • 如何快速配置Windows风扇控制软件:免费系统散热优化完全指南
  • MiMo Code:零配置云端编程环境,新手快速上手的编程训练场
  • BepInEx 6.0.0深度解析:Unity游戏插件框架的架构演进与性能优化实践
  • OpenClaw:轻量化AI智能体框架的设计原理与实战部署指南
  • 想做衣柜柜体选板材品牌推荐哪些品牌:四维优选聚焦衣柜专属方案 - 科技焦点
  • AI驱动蛋白质序列生成:从原理到实践的安全技术指南
  • 2026年学员问CPPS三个选修方向怎么选怎么收费——中研供应链刘老师X1政府采购X2招标投标X3国企采购方向对比和费用明细 - 中研供应链官方
  • 如何彻底告别网盘限速:9大平台直链下载助手终极指南
  • 零基础Milvus快速上手指南,手把手搭建RAG向量检索
  • shell和github相关
  • 考研数学高效复习策略:张宇基础与强化讲义的结合方法
  • Vue2与Vue3核心差异及性能优化实战
  • AI API集成中周期性连接重置的诊断与韧性架构实践
  • 如何快速实现游戏窗口分辨率自定义:SRWE终极窗口调整工具完全指南
  • 天赐范式第129天:精度对照实验——坐实“固有数值疤痕“
  • Muse Spark 1.2:AI编程助手从代码补全到主动思考的范式转变
  • 2026太原惠普电脑回收就来毓典奢品汇18617962974全国连锁专业靠谱,闲置笔记本处理全攻略 - 丽坤奢品汇
  • 多Agent项目实战,搭建一个产品加开发加测试的AI项目团队
  • 华为MetaERP Oracle Fusion Cloud GL(总账)完整核心基础架构深度解析总述定位Fusion GL 是整套 Fusion Financial 云 ERP统一会计中枢、全集团
  • DC-7靶机渗透测试实战:从Web漏洞到提权
  • 2026 青岛公维金申请条件与流程:最新政策全解读,免费代办攻略 - 青岛防水品牌推荐
  • Java List集合核心特性与性能优化全解析
  • 工作流商业分发与授权:从原型到产品的工程化实践
  • Unity资源管理实战:基于YooAssets构建AssetBundle热更新管线
  • 智慧井盖:物联网技术赋能城市地下管网安全监测