函数
函数
什么是函数? ·函数是一种程序构件,是构成大程序的小程序 一先定义后调用 通过函数名调用之 一调用时传递参量 调用执行的是函数体(语句序列 一调用产生返回值 。 我们已经熟悉的函数: -自己编的函数,如常用的main() -Python内建函数,如abs() - Python标准库函数,如math.sqrt()和string.split() - 对象的方法,如win.close()和p.draw() Lu Chaojun,SJTU 2
什么是函数? • 函数是一种程序构件,是构成大程序的小程序. – 先定义后调用 – 通过函数名调用之 – 调用时传递参量 – 调用执行的是函数体(语句序列) – 调用产生返回值 • 我们已经熟悉的函数: – 自己编的函数,如常用的main() – Python内建函数,如abs() – Python标准库函数,如math.sqrt()和string.split() – 对象的方法,如win.close()和p.draw() Lu Chaojun, SJTU 2
为什么需要函数? ·编程更容易把握 一复杂程序分解成较小部件 ·代码可重用 -提高开发效率 一更易维护 ·代码更简洁 ·程序更易理解 Lu Chaojun,SJTU 3
为什么需要函数? • 编程更容易把握 – 复杂程序分解成较小部件 • 代码可重用 – 提高开发效率 – 更易维护 • 代码更简洁 • 程序更易理解 Lu Chaojun, SJTU 3
编程实例:生日歌 ·用函数减少重复代码 重复代码的坏处: def main(): 1.费时费力 print "Happy birthday to you!" print "Happy birthday to you!" 2.代码维护的 print "Happy birthday,dear Fred." 致性 print "Happy birthday to you!" V def happy(): print "Happy birthday to you!" def singFred(): happy ( happy ( print "Happy birthday,dear Fred." happy (
编程实例:生日歌 • 用函数减少重复代码 def main(): print “Happy birthday to you!” print “Happy birthday to you!” print “Happy birthday, dear Fred.” print “Happy birthday to you!” def happy(): print “Happy birthday to you!” def singFred(): happy() happy() print “Happy birthday, dear Fred.” happy() 重复代码的坏处: 1.费时费力 2.代码维护的 一致性
编程实例生日歌(续) ·用参量增强函数的通用性 def singLucy(): def main(): singFred() singLucy ( 业 def sing(person): happy ( happy ( print "Happy birthday,dear",person +. happy() def main(): sing ("Fred") sing ("Lucy") sing ("Elmer")
编程实例:生日歌(续) • 用参量增强函数的通用性 def singLucy(): …… def main(): singFred() singLucy() def sing(person): happy() happy() print “Happy birthday, dear”, person + “.” happy() def main(): sing(“Fred”) sing(“Lucy”) sing(“Elmer”)
实例分析:futval.3.py ·futval2.py两处画柱子的代码是类似的 一循环外的初始柱子 -循环内的每年的柱子 ·解决方法 def drawBar(window,year,height): bar Rectangle(Point(year,0),Point (year+1,height)) bar.setFill(green") bar.setwidth(2) bar.draw (window) 初始:drawBar(win,0,2000) 每年:drawBar(win,year,height) 完整程序futval3.py Lu Chaojun,SJTU 6
实例分析:futval3.py • futval2.py两处画柱子的代码是类似的 – 循环外的初始柱子 – 循环内的每年的柱子 • 解决方法 def drawBar(window,year,height): bar = Rectangle(Point(year,0),Point(year+1,height)) bar.setFill(“green”) bar.setWidth(2) bar.draw(window) 初始:drawBar(win,0,2000) 每年:drawBar(win,year,height) – 完整程序futval3.py Lu Chaojun, SJTU 6
函数与参量 ·考虑函数定义 def drawBar(window,year,height) -参量一般代表可变的部分,如year和height - window并不变,为何作为参量? 变量作用域(scope):即可以引用该变量的区域 函数中的变量都是局部的:即他们的作用域只是 该函数内部 -上例中作画的窗口win是在drawBar()外部定义的,故 在其内部不可引用,必须通过参量传递给它,所以设 置了参量window
函数与参量 • 考虑函数定义 def drawBar(window,year,height) – 参量一般代表可变的部分,如year和height – window并不变,为何作为参量? • 变量作用域(scope):即可以引用该变量的区域. • 函数中的变量都是局部的:即他们的作用域只是 该函数内部. – 上例中作画的窗口win是在drawBar()外部定义的,故 在其内部不可引用,必须通过参量传递给它,所以设 置了参量window
函数调用过程 ·函数定义 def(): ·函数调用 () -调用程序暂停 -函数形参被赋值为实参(按位置对应) -执行函数体 一控制返回调用点的下一条语句
函数调用过程 • 函数定义 def (): • 函数调用 () – 调用程序暂停 – 函数形参被赋值为实参(按位置对应) – 执行函数体 – 控制返回调用点的下一条语句
函数调用过程图解 def happy(): def main(): def sing(person): person ="Fred" happy ( print "Happy Birthday to you!" sing("Fred") print happy ( print "Happy birthday,dear",person +". sing("Lucy") happy() person: "Fred" def main () person "Fred" def sing(person): sing("Fred") happy() print happy() sing("Lucy") print "Happy birthday,dear",person +". happy() def main(): def sing(person): sing("Fred") happy() print 农exson#"Lucy happy() sing("Lucy") print "Happy birthday,dear",person +". happy() person "Lucy
函数调用过程图解
带返回值的函数 ·函数与调用者之间的沟通: 一通过参量从调用者输入值 -通过返回值向调用者输出值 定义 def(形参): return -Python遇见return语句时即退出函数,并计算表达式 将结果返回给调用者 ·使用 x=()
带返回值的函数 • 函数与调用者之间的沟通: – 通过参量从调用者输入值 – 通过返回值向调用者输出值 • 定义 def (形参): …… return – Python遇见return语句时即退出函数,并计算表达式 将结果返回给调用者 • 使用 x = ()