news 2026/1/19 1:42:50

Python 用函数实现代码复用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 用函数实现代码复用

认识 Python 的函数

函数是一段具有特定功能的、可重复使用的代码块,它能够提高程序的模块化和代码的复用率。一个较大的程序,通常需要合理的划分程序中的功能模块,功能模块在程序设计语言中被称为函数。

使用函数有两个目的:

  • 分解问题,将一个大问题或者大功能分解成多个小问题,降低编程难度,使问题更容易解决
  • 避免编写重复代码

1、函数的定义和调用

在 Python 中,使用 def 关键字来定义函数,而函数调用通过调用语句来实现,调用语句所在的程序或函数称为调用程序或调用函数。

# 函数的定义和声明# 函数的定义defprint_line():print("**************************")defprint_text():print("这是一句话 ")# 函数的调用print_line()print_text()print_line()# 输出:# **************************# 这是一句话# **************************

2、函数的参数和返回值

在 Python 中,参数的类型很多,有形式参数(形参),实际参数(实参),必备参数、关键字参数、默认参数、不定长参数。

- 形参和实参

形参:使用 def 语句来定义函数时,函数名后面的圆括号中的参数就是形式参数(形参)。形参只能是变量,只有函数被调用时才分配内存单元,调用结束时释放所分配的内存单元。

实参:调用函数时,函数名后面的圆括号中的参数。实参可以是常量、变量、表达式,在实施函数调用时,实参必须有确定的值。

示例如下:

# 使用 max() 函数,求两个数中值较大的数defmax(a,b):ifa>b:returnaelse:returnb x=int(input("输入数字a = "))y=int(input("输入数字b = "))z=max(x,y)# 调用函数print("较大的数为:",z)# 输出:# 输入数字a = 3# 输入数字b = 6# 较大的数为: 6

在这个例子中,max() 函数括号内的 a,b 就是该函数的形参,而调用该函数时,括号内的 x 和 y 则是传递给该函数的实参。

- 必备参数

必备参数须以正确的顺序传入函数,调用函数时,输入的实参和形参的顺序要一致,实参数量必须和声明函数时形参的数量一样,不然会出现语法错误。

示例如下:

# 必备参数defprint_text(x,y):print(x,y)print_text("Hello","World")print_text("Hello")# 会报错# 输出:# Hello World# Traceback (most recent call last):# File "c:\Gitee\python\03_Day\03_function.py", line 7, in <module># print_text("Hello") # 会报错# TypeError: print_text() missing 1 required positional argument: 'y'
- 关键字参数

关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。使用关键字参数允许函数调用时参数的顺序和声明不一致,因为 Python 解释器能够用参数名匹配参数值。

示例代码如下:

# 关键字参数deffun(discount,price):# 定义函数print("商品折扣:",discount)print("商品价格:",price)returnfun(price=100,discount=0.5)# 关键字参数传递# 输出:# 商品折扣: 0.5# 商品价格: 100
- 默认参数

在定义函数时,可以为函数的某个形参赋予默认值,这个参数被称为默认值参数。带有默认值参数的函数示例如下:

# 默认值参数deffun(discount,price=100):print("商品折扣:",discount)print("商品价格:",price)returnfun(0.5)# 输出:# 商品折扣: 0.5# 商品价格: 100

在调用 fun() 函数时,只输入一个实参值。从结果知道,尽管实参没有输入具体值,price 仍然会按定义时的默认值输出。

值得注意的是:在定义有默认值参数的函数时,只能将默认值赋给最右端的参数,否则会出现语法错误。

deffun(discount=0.5,price):print("商品折扣:",discount)print("商品价格:",price)returnfun(100)# 输出:# File "c:\Gitee\python\03_Day\05_function.py", line 3# def fun(discount = 0.5,price):# ^^^^^# SyntaxError: non-default argument follows default argument
- 不定长参数

在使用函数时,若希望一个函数能够处理比定义时更多的参数,即参数数量是可变的,那么可以在函数中使用不定长参数。与上面几种参数相区别的是,不定长参数在声明时,形参不会命名。

在函数的第一行参数列表最右侧增加一个带有 * 的参数,基本语法格式为:

def函数名([形参列表,]*args):函数体

其中,* args 用来接收任意多个实参并将其放在一个元祖(tuple)中供函数使用。

# 不定长参数deff(x,y,*args):print(x)print(y)print(args)f(10,9,8,7,6,5,4,3,2,1)# 输出:# 10# 9# (8, 7, 6, 5, 4, 3, 2, 1)

不懂怎么应用,多余的参数都被args接收,后面用到了详解

- 函数的返回值

在 Python 中,函数使用 return 语句返回值,选择性地向调用方返回一个表达式。return 语句用来退出函数并将程序返回到函数被调用的位置继续执行,可以返回0个,1个或一组值。函数返回的值被称为返回值,基本语法结构为:

return[返回值列表]

其中,return 语句可以在函数体的任何位置出现,return 语句是可选的,如果有 return 语句,但是 return 后面没有接表达式或者值的,则返回 None;如果没有 return 语句,则会自动返回 None。

# 函数的返回值deffun(discount,price):price=price*discountprint("商品折扣:",discount)print("商品价格:",price)returnprice;price=fun(0.5,100)# 输出:# 商品折扣: 0.5# 商品价格: 50.0

3、递归函数

Python 支持函数的递归调用,所谓递归就是自己函数直接或间接的调用其本身。

举个例子:

# 递归:在纸上执行遍就懂了deff(n):ifn==1:return1else:returnf(n-1)*n# 先是调用自己,全部完成后逐步 返回值n=int(input("请输入一个正整数:"))print(n,"的阶乘为:",f(n))# 输出:# 请输入一个正整数:3# 3 的阶乘为: 6

4、匿名函数

lambda 函数用于定义简单的、能够一行内表示的函数。

示例如下:

sum=lambdaarg1,arg2:arg1+arg2;print("total:",sum(20,50))# 输出:# 70

5、变量的作用域

变量的作用域就是变量的使用范围,程序的运行离不开变量。

一个程序的所有变量并不是在哪个位置都可以访问的,访问权限取决于这个变量是在哪里赋值。

在 Python 中,根据变量的作用域的不同,分成全局变量局部变量。定义在函数内的变量,只能在函数内部使用,作用范围仅在函数内部的变量,称为局部变量。在函数之外定义的变量称为全局变量,全局变量在整个程序内起作用。

示例如下:

# 变量的作用域price=200deffun(discount,price):price=price*discountprint("函数内局部变量价格为:",price)returnprice fun(0.5,200)print("函数外全局变量价格为:",price)# 输出:# 函数内局部变量价格为: 100.0# 函数外全局变量价格为: 200

6、Python 内置函数常用归纳表

- Python 内置函数表
分类函数名功能说明简单示例
基础输入输出print()输出内容到控制台,支持字符串格式化print("姓名:%s" % "Tom")→ 姓名:Tom
input()从控制台获取用户输入,返回字符串类型age = input("请输入年龄:")→ 接收字符串输入
类型转换str()将其他类型转换为字符串(核心)str(123.45)→ “123.45”;str(True)→ “True”
int()将数字字符串转换为整数int("100")→ 100
float()将数字字符串转换为浮点数float("3.14")→ 3.14
bytes()将字符串转换为字节对象(指定编码)bytes("Python", encoding="utf-8")→ b’Python’
list()将字符串拆分为字符列表list("abc")→ [“a”, “b”, “c”]
序列/集合操作len()计算字符串长度(最常用)len("Hello Python")→ 11
sorted()对字符串字符按Unicode排序,返回列表sorted("bac")→ [“a”, “b”, “c”]
enumerate()遍历字符串的索引和字符for i, c in enumerate("ab"): print(i, c)→ 0 a、1 b
字符串专用内置函数ord()将单个字符转换为对应的Unicode编码值ord("A")→ 65;ord("中")→ 20013
chr()将Unicode编码值转换为对应的字符chr(65)→ “A”;chr(20013)→ “中”
ascii()返回对象的ASCII表示,非ASCII字符用\u/\U转义ascii("中")→ “‘\u4e2d’”
format()内置格式化函数(与字符串format()方法功能一致)format(3.1415, ".2f")→ “3.14”
数学计算max()获取字符串中字符的最大Unicode值max("abc")→ “c”
min()获取字符串中字符的最小Unicode值min("abc")→ “a”
对象判断与标识type()判断对象是否为字符串类型type("abc")<class 'str'>
isinstance()判断对象是否为字符串实例isinstance("abc", str)→ True
文件操作open()读取/写入字符串到文件(指定编码)with open("test.txt", "w", encoding="utf-8") as f: f.write("测试")
其他常用eval()执行字符串中的Python表达式(慎用,避免安全风险)eval("'a'+'b'")→ “ab”
repr()返回对象的官方字符串表示(保留原始格式)repr("abc\n")→ “‘abc\n’”(区别于str()的直观表示)

- 常用字符串方法表
方法名功能说明简单示例
strip()去除字符串首尾的空白字符(空格、换行、制表符),可指定去除的字符" abc \n".strip()→ “abc”;"###abc###".strip("#")→ “abc”
lstrip()去除字符串左侧的空白字符或指定字符" abc".lstrip()→ “abc”
rstrip()去除字符串右侧的空白字符或指定字符"abc ".rstrip()→ “abc”
split()按指定分隔符拆分字符串为列表,默认按空白字符拆分"a,b,c".split(",")→ [“a”,“b”,“c”];"a b c".split()→ [“a”,“b”,“c”]
join()将可迭代对象(列表、元组)的字符串元素用指定分隔符连接为一个字符串",".join(["a","b","c"])→ “a,b,c”
replace()将字符串中的指定子串替换为新子串,可指定替换次数"abac".replace("a", "x")→ “xbxc”;"abac".replace("a", "x", 1)→ “xbac”
lower()将字符串所有字符转为小写"Python".lower()→ “python”
upper()将字符串所有字符转为大写"Python".upper()→ “PYTHON”
startswith()判断字符串是否以指定子串开头(支持指定起始/结束位置)"Python".startswith("Py")→ True;"Python".startswith("th", 2)→ True
endswith()判断字符串是否以指定子串结尾(支持指定起始/结束位置)"Python".endswith("on")→ True
find()查找子串在字符串中的首次出现位置,找不到返回-1(比index()更安全)"abcabc".find("bc")→ 1;"abc".find("d")→ -1
index()查找子串的首次出现位置,找不到抛出ValueError"abcabc".index("bc")→ 1
count()统计子串在字符串中出现的次数"abac".count("a")→ 2
splitlines()按换行符拆分字符串为列表(处理多行文本)"a\nb\nc".splitlines()→ [“a”,“b”,“c”]
format()字符串格式化(替代%格式化,更灵活)"姓名:{},年龄:{}".format("Tom", 18)→ “姓名:Tom,年龄:18”
f-stringPython3.6+ 特性,字符串前缀f,直接嵌入变量(最简洁的格式化方式)name="Tom"; f"姓名:{name}"→ “姓名:Tom”
isdigit()判断字符串是否全为数字字符(0-9)"123".isdigit()→ True;"123a".isdigit()→ False
isalpha()判断字符串是否全为字母字符"abc".isalpha()→ True;"abc123".isalpha()→ False
isspace()判断字符串是否全为空白字符" \n\t".isspace()→ True
capitalize()将字符串首字符转为大写,其余转为小写"python".capitalize()→ “Python”
title()将字符串每个单词的首字符转为大写"hello world".title()→ “Hello World”
center()将字符串居中,指定总长度,填充指定字符(默认空格)"abc".center(5, "-")→ “-abc-”
zfill()字符串左侧补0,达到指定长度(常用于数字格式化)"123".zfill(5)→ “00123”
replace()替换子串(重复列,强调重要性)同上

写在最后

内置函数比较多,记住常用的就行

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/29 16:46:41

ROS2工业机器人控制:从理论到实践

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个工业机械臂控制系统的ROS2项目&#xff0c;要求&#xff1a;1.实现机械臂的逆运动学计算&#xff1b;2.集成虚拟力传感器反馈&#xff1b;3.包含MoveIt2的运动规划接口&…

作者头像 李华
网站建设 2026/1/5 22:49:23

DeepFM算法解析:如何用AI优化推荐系统开发

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 使用DeepFM算法构建一个电商推荐系统。要求&#xff1a;1. 支持用户历史行为数据和商品特征作为输入 2. 实现深度部分和FM部分的特征交叉 3. 输出用户对商品的点击率预测 4. 提供AP…

作者头像 李华
网站建设 2025/12/12 16:15:27

Windows硬件访问终极指南:WinRing0库的7个实战应用场景

Windows硬件访问终极指南&#xff1a;WinRing0库的7个实战应用场景 【免费下载链接】WinRing0 WinRing0 is a hardware access library for Windows. 项目地址: https://gitcode.com/gh_mirrors/wi/WinRing0 WinRing0是一个专为Windows平台设计的硬件访问库&#xff0c;…

作者头像 李华
网站建设 2026/1/13 11:32:32

Figma中文插件完全指南:从零开始的本地化设计体验

还在为Figma的英文界面感到困扰吗&#xff1f;想要快速上手这款强大的设计工具却受限于语言障碍&#xff1f;Figma中文插件正是您需要的完美解决方案。这款由专业设计师团队精心翻译校验的免费插件&#xff0c;让国内设计师彻底告别语言烦恼&#xff0c;专注于创意实现。前100字…

作者头像 李华
网站建设 2025/12/18 10:43:09

5个程序员必备的右键管理实战技巧

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个面向开发者的专业右键管理工具&#xff0c;重点支持以下开发场景&#xff1a;1) 集成VS Code右键菜单&#xff0c;支持快速打开项目文件夹 2) Git操作快捷入口(commit, pus…

作者头像 李华
网站建设 2026/1/12 15:59:14

喜马拉雅下载深度攻略:高效获取付费音频的完整解决方案

还在为喜马拉雅VIP内容无法离线收听而困扰&#xff1f;这款基于GoQt5技术栈开发的喜马拉雅下载工具&#xff0c;为你提供了一套完整的音频下载解决方案。无论你是技术爱好者还是普通用户&#xff0c;都能通过本工具轻松实现付费内容的本地化存储。 【免费下载链接】xmly-downlo…

作者头像 李华