news 2026/6/12 18:28:05

Python 小高考篇(5)自定义函数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 小高考篇(5)自定义函数

目录

  • ​d​e​f​ ​定​义​函​数​
    • ​传​入​参​数​
    • ​返​回​值​
  • ​l​a​m​b​d​a​ ​定​义​函​数​
  • ​递​归​
  • ​自​测​
  • ​总​结​
  • ​结​尾​

​本​文​由​J​z​w​a​l​l​i​s​e​r​原​创​,​发​布​在​C​S​D​N​平​台​上​,​遵​循​CC 4.0 BY-SA协​议​。​
​因​此​,​若​需​转​载​/​引​用​本​文​,​请​注​明​作​者​并​附​原​文​链​接​。​
​违​者​必​究​,​谢​谢​配​合​。​
​个​人​主​页​:​blog.csdn.net/jzwalliser

在​p​y​t​h​o​n​中​,​如​果​有​一​个​代​码​片​段​需​要​频​繁​使​用​,​则​可​以​考​虑​将​其​写​为​一​个​自​定​义​函​数​。​

​d​e​f​ ​定​义​函​数​

通​过​d​e​f​关​键​词​,​可​以​自​定​义​一​个​函​数​,​之​后​再​在​代​码​内​调​用​它​。​如​:​

defhello():print("Hello World!")print("Hello!")hello()

运​行​结​果​:​

Hello World! Hello!

第​一​行​代​表​定​义​一​个​函​数​,​函​数​名​字​叫​hello;​第​2​行​到​第​3​行​代​表​该​函​数​需​要​执​行​的​东​西​,​第​4​行​代​表​执​行​该​函​数​。​

​传​入​参​数​

就​像​数​学​公​式​内​,​我​们​可​能​会​这​么​写​:​f ( x ) = x + 1 f(x)=x+1f(x)=x+1。​可​以​注​意​到​,​其​实​它​有​一​个​参​数​x xx。​
p​y​t​h​o​n​内​定​义​函​数​也​可​以​有​参​数​,​像​这​样​:​

defsayhello(who):print("Hello",who+"!")sayhello("Jzwalliser")

运​行​结​果​:​

Hello Jzwalliser!

对​比​一​下​,​发​现​第​一​个​例​子​中​,​在​定​义​函​数​名​时​,​后​面​的​括​号​中​没​有​任​何​内​容​(​def hello():)​,​而​在​第​二​个​例​子​中​,​括​号​中​有​个​“​who”​(​def sayhello(who):)​。​其​中​,​这​里​的​“​who”​就​是​一​个​参​数​,​可​以​理​解​为​一​个​变​量​。​再​看​最​后​一​行​(​sayhello("Jzwalliser"))​,​其​实​在​这​里​就​把​who的​值​设​置​为​了​"​J​z​w​a​l​l​i​s​e​r​"​,​所​以​第​二​行​在​输​出​有​关​内​容​时​,​读​取​到​的​who的​值​即​为​"​J​z​w​a​l​l​i​s​e​r​"​。​

​返​回​值​

返​回​值​,​就​是​一​个​函​数​运​行​完​后​还​给​外​界​的​数​值​。​如​:​

defplus(a,b):print(a+b)defplus2(a,b):returna+b result1=plus(114000,514)result2=plus2(114000,514)print("result1",result1)print("result2",result2)

运​行​结​果​:​

114514 result1 None result2 114514

同​样​是​加​法​计​算​,​plus函​数​只​是​直​接​输​出​结​果​,​但​plus2函​数​更​为​“​高​明​”​,​它​可​以​将​计​算​结​果​保​存​到​指​定​的​变​量​中​。​
这​就​是​返​回​值​,​在​函​数​最​后​面​添​加​一​行​return sth就​可​以​将​数​据​返​回​给​外​界​,​就​像​是​函​数​内​部​和​外​部​的​桥​梁​一​样​。​
不​过​注​意​,​return后​面​的​代​码​是​不​执​行​的​,​像​这​样​:​

deftest():print("return 之前")return114514print("return 之后")test()

运​行​结​果​:​

return 之前

​l​a​m​b​d​a​ ​定​义​函​数​

lambda是​一​种​很​简​洁​(​偷​懒​)​的​函​数​定​义​方​法​,​它​的​代​码​量​比​def定​义​的​函​数​少​很​多​,​但​是​正​因​如​此​它​所​能​实​现​的​功​能​也​远​没​有​def多​。​
先​看​个​例​子​,​将​f ( x ) = 2 x f(x)=2xf(x)=2x分​别​用​lambda和​def变​成​函​数​:​

f=lambdax:2*xprint(f(5))
deff(x):returnx*2print(f(5))

以​上​两​段​代​码​其​实​是​基​本​等​价​的​,​可​以​看​出​第​一​段​代​码​量​要​少​很​多​,​甚​至​连​个​return都​没​有​,​但​实​际​上​它​依​然​有​个​返​回​值​。​
解​释​一​下​第​一​段​代​码​什​么​意​思​:​
1​. ​f为​函​数​名​
2​. ​lambda表​示​需​要​定​义​一​个​函​数​
3​. ​x是​一​个​参​数​
4​. ​2 * x是​一​个​表​达​式​,​同​时​也​是​这​个​函​数​的​返​回​值​

​递​归​

递​归​,​就​是​一​个​函​数​自​己​调​用​自​己​。​递​归​主​要​由​两​个​部​分​组​成​:​递​归​操​作​及​递​归​边​界​。​递​归​操​作​是​函​数​的​主​体​部​分​,​负​责​执​行​运​算​、​实​现​功​能​;​递​归​边​界​即​一​个​条​件​,​ ​满​足​条​件​后​停​止​递​归​,​并​返​回​上​一​层​,​以​避​免​程​序​无​限​递​归​下​去​而​陷​入​死​循​环​。​
比​如​,​计​算​斐​波​那​契​数​列​就​可​以​使​用​递​归​算​法​来​实​现​。​假​设​第​x xx项​用​f ( x ) f(x)f(x)来​表​示​(​x ∈ Z + x\in\mathbb{Z_+}xZ+)​,​那​么​:​

f ( x ) = { 1 ( x = 1 ) 1 ( x = 2 ) f ( x − 1 ) + f ( x − 2 ) ( x ≥ 3 ) f(x)=\left\{ \begin{aligned} &1\space(x=1) \\ &1\ (x=2)\\ &f(x-1)+f(x-2)\space(x\geq 3) \\ \end{aligned} \right.f(x)=1(x=1)1(x=2)f(x1)+f(x2)(x3)

翻​译​为​p​y​t​h​o​n​如​下​。​

deff(x):ifx==1orx==2:return1else:returnf(x-1)+f(x-2)

由​于​之​前​就​写​过​一​篇​关​于​递​归​的​文​章​,​这​里​就​不​在​赘​述​了​,​欲​知​详​情​,​请​移​步​到​这​里​:​初识递归算法。​

​自​测​

1​. ​阅​读​以​下​代​码​:​

deff(x):ifx>1:returnx*f(x-1)return1print(f(10))

该​程​序​输​出​为​(​ ​ ​ ​ ​ ​ ​)​
A​.​ ​362880
B​.​ ​3628800
C​.​ ​39916800
D​.​ ​10
【​答​案​】​B​

2​. ​阅​读​以​下​代​码​:​

deff(x):ifx==0:return1returnf(x-1)*2

这​段​代​码​表​达​的​等​价​数​学​公​式​是​(​ ​ ​ ​ ​ ​ ​)​
A​.​ ​f ( x ) = 2 x ( x ∈ N ) f(x) = 2^x(x\in\mathbb N)f(x)=2x(xN)
B​.​ ​f ( x ) = 2 x ( x ∈ N ) f(x) = 2x(x\in\mathbb N)f(x)=2x(xN)
C​.​ ​f ( x ) = 2 x − 2 ( x ∈ N ) f(x) = 2x-2(x\in\mathbb N)f(x)=2x2(xN)
D​.​ ​f ( x ) = 2 x − 1 ( x ∈ N ) f(x) =2^{x-1}(x\in\mathbb N)f(x)=2x1(xN)
【​答​案​】​A​

​总​结​

d​e​f​ ​定​义​函​数​
使​用​def定​义​函​数​的​模​板​:​

deffunction(arg1,arg2,arg3):#定义函数returnvalue=do_sth(arg1,arg2,arg3)#操作和运算returnreturnvalue#返回值

l​a​m​b​d​a​ ​定​义​函​数​
模​板​:​

func=lambdaarg1,arg2,arg3:do_sth(arg1,arg2,arg3)

递​归​
递​归​,​即​函​数​自​己​调​用​自​己​。​层​层​深​入​进​行​计​算​,​之​后​再​回​溯​,​将​计​算​结​果​返​回​到​上​一​层​参​与​运​算​。​

​结​尾​

好​啦​,​今​天​就​分​享​到​这​里​了​,​记​得​一​键​三​连​哦​(​˵​¯​͒​〰​¯​͒​˵​)​

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

Java毕设选题推荐:基于 SpringBoot 的旅游路线推荐与行程管理系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/6/12 18:20:08

AutoJs6:如何在安卓平台上构建企业级JavaScript自动化解决方案

AutoJs6:如何在安卓平台上构建企业级JavaScript自动化解决方案 【免费下载链接】AutoJs6 安卓平台 JavaScript 自动化工具 (Auto.js 二次开发项目) 项目地址: https://gitcode.com/gh_mirrors/au/AutoJs6 AutoJs6是一款基于Android无障碍服务的JavaScript自动…

作者头像 李华
网站建设 2026/6/12 18:19:38

Evernote2md:高效解决笔记格式转换难题的实用开源工具

Evernote2md:高效解决笔记格式转换难题的实用开源工具 【免费下载链接】evernote2md Convert Evernote .enex files to Markdown 项目地址: https://gitcode.com/gh_mirrors/ev/evernote2md 还在为如何将Evernote笔记转换为Markdown格式而烦恼吗?…

作者头像 李华
网站建设 2026/6/12 18:18:55

Layerdivider:3分钟将单张图片转换为可编辑PSD图层的智能工具

Layerdivider:3分钟将单张图片转换为可编辑PSD图层的智能工具 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 你是否曾经面对一张精美的设计图…

作者头像 李华
网站建设 2026/6/12 18:17:55

终极指南:3步掌握Zotero中文文献管理插件

终极指南:3步掌握Zotero中文文献管理插件 【免费下载链接】jasminum A Zotero add-on to retrive CNKI meta data. 一个简单的Zotero 插件,用于识别中文元数据 项目地址: https://gitcode.com/gh_mirrors/ja/jasminum 还在为中文文献管理而烦恼吗…

作者头像 李华