您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > Python > Python-教程-chapter6
函数什么是函数?基本思想–给出语句序列,并给这个序列一个名字–用来组织语句,便于掌控程序的开发–功能切割,模块化,结构化–一次定义多次使用函数是一种程序构件,是构成大程序的小程序.–先定义后调用–通过函数名调用之–调用时传递参量–调用执行的是函数体(语句序列)–调用产生返回值2什么是函数?我们已经熟悉的函数:–自己编的函数,如常用的main()–Python内建函数,如abs()(语言的一部分)–Python标准库函数,如math.sqrt()和string.split()–对象的方法,如win.close()和p.draw()3Pythonbuilt-infunctionsLibrary(import)Userdefined(def)为什么需要函数?编程更容易把握复杂程序分解成较小部件、子程序代码可重用–提高开发效率–更易维护–如:库4为什么需要函数?代码更简洁、美观减少重复编码程序更易理解–读程序是很困难的–结构、注解有助于理解程序5编程实例:生日歌用函数减少重复代码futuvalgraph2-3defmain():print“Happybirthdaytoyou!”print“Happybirthdaytoyou!”print“Happybirthday,dearFred.”print“Happybirthdaytoyou!”defhappy():print“Happybirthdaytoyou!”defsingFred():happy()happy()print“Happybirthday,dearFred.”happy()重复代码的坏处:1.费时费力2.代码维护的一致性(例如:单词拼写错误)编程实例:生日歌(续)用参量增强函数的通用性(代码可重用)defsingLucy():……defmain():singFred()singLucy()defsing(person):happy()happy()print“Happybirthday,dear”,person+“.”happy()defmain():sing(“Fred”)sing(“Lucy”)sing(“Elmer”)实例分析:futval3.pyfutval2.py两处画柱子的代码是类似的–循环外的初始柱子–循环内的每年的柱子解决方法–把共同性抽取出来,可变的作为参数8实例分析:futval3.py解决方法defdrawBar(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(简洁,易理解,便于维护)9函数与参量考虑函数定义defdrawBar(window,year,height)–参量一般代表可变的部分,如year和height–window并不变,为何作为参量?变量作用域(scope):即可以引用该变量的区域函数与参量函数中的变量都是局部的–它们的作用域只是该函数内部,而且函数执行完毕,变量所占有的内存空间也被释放–同一个变量名可以出现在不同的函数中,而且互不干扰–函数是:独立的,黑箱子,秘密不可泄露–函数f1获知函数f2中某个变量的唯一途径是:该变量被作为参数传递给f1–上例中作画的窗口win是在drawBar()外部定义的,故在其内部不可引用,必须通过参量传递给它,所以设置了参量window举例x=‘outside’y=‘global’deff():x=‘inside’printxprintyf()printx函数调用过程函数定义def函数名(形参列表):函数体例如:defdrawBar(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)–调用程序暂停–函数形参被赋值为实参(按位置对应)–执行函数体–控制返回调用点的下一条语句函数调用过程图解带返回值的函数函数与调用者之间的沟通:–通过参量从调用者输入值–通过返回值向调用者输出值定义def函数名(形参):……return表达式列表–Python遇见return语句时即退出函数(即使后面还有语句也不再执行),并计算表达式将结果返回给调用者–若无return语句,系统返回默认值None带返回值的函数使用x=函数名(实参)这样的调用:函数名(实参)是不关心返回值编程实例:triangle2.py修改triangle.py程序,计算三角形的周长定义了两个带返回值的函数:defsq(x):returnx*xdefdist(p1,p2):d=math.sqrt(sq(p2.getX()p1.getX())+sq(p2.getY()p1.getY()))returnd……p=dist(p1,p2)+dist(p2,p3)+dist(p3,p1)说明:简洁,系统调用耗时增多。函数与程序结构函数不只是为了减少重复代码函数还使程序更加模块化(modular).–即使增加了代码量!–Tradeoff:模块化和代码量编程实例:futval4.py–将主程序中并未重复出现的语句序列改写成了一个函数,原地方改成一个函数调用.–代码量不减反增,但程序可读性大大增强!2020End
本文标题:Python-教程-chapter6
链接地址:https://www.777doc.com/doc-3942967 .html