- Python程序设计应用教程
- 夏敏捷 张西广
- 1296字
- 2021-03-25 10:05:16
4.1 函数的定义和使用
在Python程序开发过程中,可将完成某一特定功能并经常使用的代码编写成函数,放在函数库(模块)中供大家在需要使用时直接调用。开发人员要善于使用函数,以提高编码效率,减少编写程序段的工作量。
4.1.1 函数的定义
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00059001.jpg?sign=1739368040-ZqwPQXE5wRljwGuKDLNffNV4ana0UdLW-0-5d330a50f432bd5f8183524a2a29f4de)
函数定义
在某些编程语言当中,函数声明和函数定义是区分开的(在这些编程语言当中函数声明和函数定义可以出现在不同的文件中,如C语言),但是在Python中,函数声明和函数定义是视为一体的。在Python中,函数定义的基本形式如下:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00059002.jpg?sign=1739368040-qxZqS9vXBPbavlOEZGrv9ZQGAuV2RI3a-0-d0995016d882c1684ce4306041477a8a)
在这里说明几点:
(1)在Python中采用def关键字进行函数的定义,不用指定返回值的类型。
(2)函数参数可以是零个、一个或者多个,同样,函数参数也不用指定参数类型,因为在Python中变量都是弱类型的,Python会自动根据值来维护其类型。
(3)Python函数的定义中缩进部分是函数体。
(4)函数的返回值是通过函数中的return语句获得的。return语句是可选的,它可以在函数体内任何地方出现,表示函数调用执行到此结束;如果没有return语句,会自动返回None(空值),如果有return语句,但是return后面没有接表达式或者值,也返回None(空值)。
下面定义3个函数:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00059003.jpg?sign=1739368040-MDSG98QQFtBBsiI3HUDhbQwJET4Q60A1-0-bc7476ffaa60f7c53d025349e0977e87)
4.1.2 函数的使用
在定义了函数之后,就可以使用该函数,但是在Python中要注意一个问题,就是在Python中不允许前向引用,即在函数定义之前,不允许调用该函数。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00060002.jpg?sign=1739368040-ryI1aZEoSlssTDvWNVkvTkc1AJYfHjM7-0-53f00babbbf13595cb4ebc4eee1a7fd8)
运行这段程序会出现错误提示:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00060003.jpg?sign=1739368040-DuCvq8twD6WGSahaqdtrz92crrfJeasp-0-5ca44c97c6f6d51d7ded83528e6c022c)
从提示可知,名为add的函数未进行定义,所以在任何时候调用某个函数,必须确保其定义在调用之前。
【例4-1】编写函数实现最大公约数算法,通过函数调用代码实现求最大公约数。
分析:这里求两个数x、y最大公约数的算法是遍历法。循环变量i从1到最小那个数,用x、y同时去除以i,如果能整除则赋值给hcf;最后返回最大的hcf(最后一次赋值最大)。
程序代码:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00060004.jpg?sign=1739368040-0ZESmpbIjqZVQZDlUgUJ2lAZ3dle8BPE-0-864dde7f8e26c133d380a3f2da9a9172)
程序运行结果:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00061001.jpg?sign=1739368040-Wk3DISMTCWJbexPniJFLGIw2hvDvUqxr-0-acb8b147177d968af693875ff320664b)
【例4-2】编写函数,计算形式如a+aa+aaa+aaaa+…+aaa…aaa的表达式的值,其中a为小于10的自然数。例如,2+22+222+2222+22222(此时n=5),a、n由用户从键盘输入。
分析:关键是计算出求和中每一项的值。容易看出每一项都是前一项扩大10倍后加a。
程序代码:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00061002.jpg?sign=1739368040-EEe9DQLoPZsv2hJxkSwltvb8K49QcKoX-0-c4fb5c014b7ab9c7067502e60c95bbfd)
程序运行结果:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00061003.jpg?sign=1739368040-iJZUiWuL9HGE1d9Ze2hLY6SCXXOdXPwS-0-71370d963f98c8dd82afcd8f51f158fc)
4.1.3 lambda表达式
lambda表达式可以用来声明匿名函数,即没有函数名字的临时使用的函数,只可以包含一个表达式,且该表达式的计算结果为函数的返回值;不允许包含其他复杂的语句,但在表达式中可以调用其他函数。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00061004.jpg?sign=1739368040-uBgti4En3FtWHg4UF99niy81ObRsHu8E-0-7b3e63127292b876c6eb4ff236cbf2ac)
程序运行结果:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00061005.jpg?sign=1739368040-BxVWpcnybJj2xg5Iii2cujkn0l4dolKh-0-3fd60d31cc51de88b45cd88fc4c955c3)
等价于定义:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00061006.jpg?sign=1739368040-SQySHij5ctNq1Tq6jylyR6JcgVPdd0GC-0-80b51df35d9317818d4b8c5de97e7ee5)
可以将lambda表达式作为列表的元素,从而实现跳转表的功能,也就是函数的列表。lambda表达式列表的定义方法如下:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00061007.jpg?sign=1739368040-oljx5VBOysa49XwMhfYm59smRjFoE1by-0-77a1e0d75d4d5846f7f31a9a0d0412cb)
调用列表中lambda表达式的方法如下:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00061008.jpg?sign=1739368040-EJTURMlmuhl3mWgxLyfTkxKi8ystWkQz-0-bbcddbe6159aedf0cefedbca06373110)
例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00061009.jpg?sign=1739368040-rkXDsiZrVVGg3ijNwGKBdxF8bjYccng1-0-d67a399e79f4e454920d78045f04446e)
程序分别计算并打印2的平方、立方和四次方。程序运行结果:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00062001.jpg?sign=1739368040-Oy1EocOACppC02G16b6nRShHyMPi7Fkq-0-ad391fde5224e9e5b46c163721518f81)
4.1.4 函数的返回值
函数使用return返回值,也可以将lambda表达式作为函数的返回值。
【例4-3】定义一个函数math()。当参数k等于1时返回计算加法的lambda表达式;当参数k等于2时返回计算计算减法的lambda表达式;当参数k等于3时返回计算乘法的lambda表达式;当参数k等于4时返回计算除法的lambda表达式。
程序代码:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00062002.jpg?sign=1739368040-5CheH2oXkihxpkJHmDPrsWDSF2VjM0d8-0-71a0a59c80a12d8677758781f5ff6df7)
程序运行结果:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00062003.jpg?sign=1739368040-13vLrZ8Q5HYiDcLCHVrM1TefBeF03whA-0-1ec4b228667c7eeb7b3c27caf1bd0c58)
最后需要补充一点:Python中的函数是可以返回多个值的,如果返回多个值,会将多个值放在一个元组或者其他类型的集合中来返回。
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00062004.jpg?sign=1739368040-SMWMCB3QXZXFf6edmHFIQVUtm3M0R9Kq-0-37a115bbb53d2105d5e79f073913f255)
程序运行结果:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00062005.jpg?sign=1739368040-p5fQOLVQvJn8WoXLzBU4tIIlCOBCuyYe-0-b1fab11711b2f291d71b1b90361af331)
【例4-4】编写函数实现求字符串中大写、小写字母的个数。
分析:需要返回大写、小写字母的个数,返回2个数,所以使用列表返回。
程序代码:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00063001.jpg?sign=1739368040-IlcAob2XVjlDamuIRC6dQFEsInSay6Lu-0-ff71760035ffd87faccf94f831de3aed)
程序运行结果:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00063002.jpg?sign=1739368040-fN24g38BIY8vDytkuAA8ZGA7CnJt9pWz-0-48e41ac970d1986f38dd3dc44ad2355b)