您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > Python基础教程--06第六章抽象(函数).
第六章抽象(函数)PythonContents目录懒惰即美德抽象和结构创建函数参数魔法作用域递归小结懒惰即美德01重复的工作•fibs=[0,1]•foriinrange(8):•fibs.append(fibs[-2]+fibs[-1])•如果计算前20个(---n)呢?•fibs=[0,1]•num=input('HowmanyFibonaccinumbersdoyouwant?')•foriinrange(num-2):•fibs.append(fibs[-2]+fibs[-1])•printfibs更为便(lan)捷(duo)的方法•我只想告诉他做什么,具体怎么做,另外再说......•num=input('Howmanynumbersdoyouwant?')•printfibs(num)抽象与结构、创建函数02-03抽象与结构•page=download_page()•freqs=compute_frequencies(page)•forword,freqinfreqs:•printword,freq创建函数•我们用过的函数–math–cos,sin–他们如何定义的?•第一个简单的函数–defhello(name):•return'Hello,'+name+'!'–printhello('Ray')斐波那契函数•deffibs(num):•u'斐波那契数列的前num项'•result=[0,1]•foriinrange(num-2):•result.append(result[-2]+result[-1])•returnresultdocumenting•defsquare(x):–'Calculatesthesquareofthenumberx.'–returnx*x•myfun.square.__doc__•help(myfun.square)return•return•return变量•没有return语句会怎样?return•num=input('Pleaseinputaintnumber')•defodd_even(digit)–ifdigit%2==0:•return函数结构•def函数名(参数列表)–'函数字符串'–语句块–return•注意:return可以嵌入在语句块,一定不能少。函数的调用•import文件名#函数定义所在文件•文件名.函数名(参数)函数的调用•本文件内使用:•deftest_fun(para1):•testresult=para1+20•returntestresult•in_pa=input(Pleaseinputonenumber:)•printtest_fun(in_pa)参数魔法04值从哪里来形式参数值(实际参数)例题:计算三个圆的面积和周长,这三个圆的半径分别为2,3,4。我只想做个安静的变量•有时我被强行整容,有时我不动如山–不变:传值–整容:传址•为什么?–还记得之前的赋值符号吗?不动如山,如何实现?•如何避免赋值后被修改?–完美的替身(建立副本):•列表,lst_new=lst_old[:]•字典,dct_new=dct_old.copy()•为什么建立副本不会影响原有变量的值?•补充:–dct.get('key'):找不到时,告诉你“None”。–dct['key']:找不到时,啥也不说,直接罢工。为什么要变•看完这个例子你就知道•P95,storage•字典,保存firstname,middlename,lastname,并且可以通过其中任意的找到联系人。–storage={}–storage['first']={}–storage['middle']={}–storage['last']={}字典联系人•加入一个联系人:meme='MagnusLieHetland'storage['first']['Magnus']=[me]storage['middle']['Lie']=[me]storage['last']['Hetland']=[me]•查找一个中间名为:Lie的人•storage['middle']['Lie']•增加一个联系人:my_sister='AnneLieHetland'storage['first'].setdefault('Anne',[]).append(my_sister)storage['middle'].setdefault('Lie',[]).append(my_sister)storage['last'].setdefault('Hetland',[]).append(my_sister)storage['first']['Anne']['AnneLieHetland']如果我们是这样处理数据?•计算机不会烦,人肯定是很烦了。•如果这样呢:–MyNames={}–init(MyNames)–store(MyNames,'MagnusLieHetland')–store(MyNames,'HuangLieRaymond')–printlookup(MyNames,'middle','Lie')–查看示例store.py更进一步•每增加一个名字,都需要一次–store(MyNames,'MagnusLieHetland')–store(MyNames,'HuangLieRaymond')•能否更快速?收集参数•*:收集多余的参数–示例:store2.py•**:收集多余的关键字参数•多种类型参数的使用(书本P102)–示例:parameters.py•更多的内容请自行阅读并上机测试。更进一步•把姓名录入到某个文本文件。•导入文件。•文件逐行扫描并入库。–示例:store3.py位置参数、关键字参数和默认值•在调用函数时通过形参赋值•deftstore(name,hour,minute,day,month):•print“name=”,name•print“houre=”,hour•print“minute=”,minute•print“day=”,day•print“month=”,month•以下两种调用方式的区别:–tstore('Mr.Brainsample',10,20,13,5)–tstore(patient='Mr.Brainsample',hour=10,minute=20,day=13,month=5)不同参数的区别•位置参数:–根据参数的顺序位置来匹配”值”和”参数”•关键字参数:–根据参数的关键字来匹配”值”和”参数”•默认值:–在定义函数时给参数赋值,即为默认值P98。–根据实际情况考虑使用,基于经验的判断。•参数调用的方式:–1个参数的时候,使用位置参数,或者关键字参数均可。–2个及以上参数时,尽量使用关键字参数。•注意:–避免位置参数和关键词参数混合使用作用域05看看这个•deffoo():•x=42•return•x=1•print'before,x=',x•t=foo()•print't=',t•print'after,x=',x•结果会是什么?变量作用域•从第一次出现(初始化)的位置开始,一直到其所在程序(模块、函数、类)结束。•全局变量•局部变量函数内引用全局变量•需要特殊说明–x=1–defchange_global():–globalx–x=x+1–change_global()–x•但是不建议使用,因为会破坏“抽象”。递归06示例•递归求阶乘•二分查找小结07知识点•函数的定义和使用•参数的变与不变•位置参数、关键字参数•默认值•变量作用域•递归
本文标题:Python基础教程--06第六章抽象(函数).
链接地址:https://www.777doc.com/doc-2853884 .html