版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Python3迭代器与生成器迭代器迭代是Python最强大的功能之一,是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不 会后退。迭代器有两个基本的方法:iter()和next()。字符串,列表或元组对象都可用于创建迭代器: 11print#创建e代器対象fr输出迭代器的下一个元壷1234迭代器对象可以使用常规for语句进行遍历:#!/uEr/bin/pythons,3,4it = iter (list) #创建迭代器对象 fan K in it:priFvt (町 encl=)执行以上程序,输岀结
2、果如下:也可以使用next()函数:ft! / usr/bin/py thonSimport sys1七=iterfList ) 羊创崖迭代器jTl象uihil-e Truettry:print (nextit) except S.topiteation:sys,exi+)执行以上程序,输岀结果如下:创建一个迭代器把一个类作为一个迭代器使用需要在类中实现两个方法iter_0 与 _n ext_()。Python的构造函数为 _init如果你已经了解的面向对象编程,就知道类都有一个构造函数, (),它会在对象初始化的时候执行。_n ext_()方法并通过 St_iter_()方法返回一个特殊的迭
3、代器对象,这个迭代器对象实现了 op Iteration异常标识迭代的完成。_next_()方法(Python 2里是next()会返回下一个迭代器对象。class MyNumbsrs: def _iter_(self);Si e 1 f. a = 1return 5=lfde-f _ next C self):X 二 self&elf.d += 1returr x mycla 5S = My NijintJers () iwiyiteir - iter(in/class) pri ft (n ext ( my it er) 卩广Lnt ( riexhi(myiter ) pr irvt (n
4、ext (my it er) print i(next(iiiyiten) print(next(myIter)J执行输岀结果为:Sto pl terati on_next_()方法中我们stop Iteration异常用于标识迭代的完成,防止岀现无限循环的情况,在可以设置在完成指定循环次数后触发Sto piteration异常来结束迭代。在20次迭代后停止执行:claesL HyWumfcersidef ier(self):self , fl 二 1return eelfdef _next_self);if self.a def helio():print(Hello World! )hel
5、lo() Hello World!更复杂点的应用,函数中带上参数变量牡! /iLisr/ bin/pythonStt计算面穆函勤def area(widthj. height : return width * heightdef print_weleone(name):print(welcomeJ name)printjvelcomeCRurioob)w = 4h = 5print (width vr, height =h, arsa = areah)以上实例输岀结果:WelcomeRunoob width =4 height =5 area =20函数调用定义一个函数:给了函数一个名称,指定
6、了函数里包含的参数,和代码块结构。提示符执行。如下实例调用了prin tme()函数:# Vus rfbinpython 3定買数def pri.ntine( str ):#打阳任何传入的宇蒔串print C5tr)returnfr调用ffl数p广int低我裏调用用户自宦义函数!JPrintiiieC再次调用同一函数、Python命令这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从以上实例输岀结果:我要调用用户自定义函数!再次调用同一函数参数传递在python中,类型属于对象,变量是没有类型的:a= 1,2,3a=zuomu以上代码中,1,2,3是List类型,Runoo
7、b 是String类型,而变量 a是没有类型,她仅仅是一个对象的引用(一个指针),可以是指向List类型对象,也可以是指向String类型对象。可更改(mutable)与不可更改(immutable)对象在python中,strings, tuples,和numbers是不可更改的对象,而list,dict等则是可以修改的对象。? 不可变类型:变量赋值a=5后再赋值a=10,这里实际是新生成一个int值对象10 ,再让a指向它,而5被丢弃,不是改变 a的值,相当于新生成了可变类型:变量赋值la=1,2,3,4后再赋值la2=5则是将list la的第三个元素值更改,本身la没有动,只是其内部的
8、一部分值被修改了。python函数的参数传递: ? 不可变类型: 类似C+的值传递,如整数、字符串、元组。如 fun (a),传递的只是 a的值,没有影响a对象本身。比如在 fun (a)内部修改a的值,只是修改另一个复制的对象,不会影响a本身。可变类型:类似C+的引用传递,如列表,字典。女nfun (la),则是将la真正的传过去,修改后fun外部的la也会受影响python中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。python传不可变对象实例jt i/usn/bin/pythonldef 匚hangelnit( b ):a = IQb M 2
9、Change工nt(b)pirin-t( b ) # 结果是 2实例中有int对象2,指向它的变量是b,在传递给ChangeInt函数时,按传值的方式复制了变量b, a和b都指向了同一个Int对象,在a=10时,则新生成一个int值对象10,并让a指向 它。传可变对象实例可变对象在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变了。例如:#! /usr/lbinr python3 #可写函皴说明def changeine nylist僮efe传入的列丧”nylist .appendl( 123,4) print 数內取值:J mylist) return# 调用changeme
10、SSrnnylist = IB, 2艮死print (S埶外取值:inylist )传入函数的和在末尾添加新内容的对象用的是同一个引用。故输岀结果如下:函数内取值:10, 20, 30, 1, 2, 3, 4函数外取值:10, 20, 30, 1, 2, 3, 4参数以下是调用函数时可使用的正式参数类型:必需参数关键字参数?默认参数不定长参数必需参数必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。调用printme()函数,你必须传入一个参数,不然会岀现语法错误:# ! /ii5r/bin/python3#可写a数说明def Printme( 5tr : ”打EU任何传典的寧符
11、串” print (st r)return#调用printme函數,不抽缕勘会抿愴 P r in+rne以上实例输岀结果:Traceback ( most recent call last ):File test.py, line 10, in :strprintme ()TypeError : printme () missing 1 required positional argument关键字参数关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。Python解释器能够用参数使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为名匹配参数值。以下实例在函数 pri
12、n tme()调用时使用参数名:吐 i/us r/bin/python3?1可写函勘说朋def purinine stn ):打印任何传入的字符串-print (str)return赴调用prH.rvtrn己函数p厂irvtm珂Str =菜乌数程)以上实例输岀结果:菜鸟教程以下实例中演示了函数参数的使用不需要使用指定顺序:ft! Zusr/bin/ pythcn3#可写函数说明dief printinfo( nene, age ); “打印任何传入的宝WS” pi-zLn1z (名字=* J name ) print年龄:age) return祥调用p rintinfoiS数priirtin*
13、o( a=n3ine=ninoo匕以上实例输岀结果:名字:runoob年龄:50默认参数age参数,则调用函数时,如果没有传递参数,则会使用默认参数。以下实例中如果没有传入使用默认值:/usr/lbinZpython3#可写a教说朋def printinfo( name, age = 35 ): ”打印任何传入的宇符串” print (E 名宇;J n ame print年SS: ireturn调用print i nf 口函勘naine=runootprintinfof &百&=亍灯= runoob J pfi吐(-Jpri ntinfof以上实例输岀结果:名字:zuomu年龄:23名字:zu
14、omu年龄:23不定长参数你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述参数不同,声明时不会命名。基本语法如下:def functionname ( formal_args ,* var_args_tuple):函数_文档字符串function suitereturn exp ression加了星号*的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。! /u&r/bin/pythonSP可写函數说明def printin百of Qrglj *yartuple ): “打用任何传入的蜃埶 print (输出: print (argl)print (
15、vartuiple)# 调printinfo 函數Printinfo( 70&0 $50以上实例输岀结果:输出:(60,50)如果在函数调用时没有指定参数,它就是一个空元组。我们也可以不向函数传递未命名的变量。如下实例:704 ! /u r/lbln/python3rt可写函麺说朋def printinfo( arglj *打印任何诗入的盏埶 print输出= prirrt (弓glj for vsr in vartuiple:print(V3 r)return吐调用print in-fp怪I数printinfo( 16 )print info(GO, 50 )以上实例输岀结果:输出:10输出
16、:706050还有一种就是参数带两个星号*基本语法如下:def functionname ( formal_args ,* var_args_dict ):函数文档字符串-function suitereturn exp ression加了两个星号*的参数会以字典的形式导入。# r/bin/pythffn3 #可写函數说明def printinf0( arglj广diet J:“打印任何隹入的盪数 print输岀 f print (argl) print (vardict Jtt iji) Sprint info 画數以上实例输岀结果:输出:a :2,b : 3声明函数时,参数中星号 *可以单
17、独岀现,例如def f ( a, b,*, c):return a+b+c如果单独岀现星号 *后的参数必须用关键字传入。def f (a, b,*, c):. return a+b+c f ( 1, 2, 3)# 报错Traceback (most recent call last ):File , line 1, in 3 were givenTypeError : f() takes 2 positional arguments but f (1,2, c=3)# 正常6 匿名函数python使用lambda来创建匿名函数。所谓匿名,意即不再使用def语句这样标准的形式定义一个函数。lam
18、bda只是一个表达式,函数体比def简单很多。lambda表达式中封装有限的逻lambda的主体是一个表达式,而不是一个代码块。仅仅能在辑进去。lambda函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。虽然lambda函数看起来只能写一行,却不等同于C或C+的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。语法lambda函数的语法只包含一个语句,如下:lambda arg1 , arg2 ,argn : expression如下实例:T*! Zusr/lbin/pythonl#可写函数说阴sum = lambda arglj a广吕2: argl+ a.-g2#调用5 M碰J数print r相加后的値掏LJii( print (相加启的值为:”以上实例输岀结果:相加后的值为:30
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年保定理工学院单招职业适应性测试题库及答案详解一套
- 2026年南昌工学院单招职业倾向性测试题库及答案详解一套
- 2026年内蒙古建筑职业技术学院单招职业技能测试题库含答案详解(b卷)
- 2026年南充文化旅游职业学院单招职业适应性测试题库附答案详解(考试直接用)
- 2026年信阳航空职业学院单招职业适应性考试题库附答案详解
- 2026年南阳工艺美术职业学院单招职业倾向性测试题库附答案详解(黄金题型)
- 2026年共青科技职业学院单招综合素质考试题库附答案详解(突破训练)
- 2026年内蒙古通辽市单招职业适应性考试题库附答案详解(轻巧夺冠)
- 2026年信阳航空职业学院单招职业倾向性测试题库有完整答案详解
- 2026年南充电影工业职业学院单招职业适应性考试题库附答案详解(精练)
- 2025山东济南文旅发展集团有限公司社会招聘3人笔试参考题库附带答案详解
- 2026贵州盘州市更正事业单位招聘(全省联考)部分职位名称备考题库含答案详解(黄金题型)
- 2026年春节后复工复产安全专题培训
- 蓄电池的正确使用
- 2025年山东信息职业技术学院单招职业适应性考试题库带答案解析
- 2026湖南衡阳日报社招聘事业单位人员16人备考题库(含答案详解)
- 2026理论考试无人机操作员考试题库及完整答案
- 2026年春统编版(新教材)小学道德与法治二年级下册(全册)教学设计(附目录P122)
- 2026年河南水利与环境职业学院单招职业技能笔试备考题库带答案解析
- 帕金森病康复护理的新进展
- 胸痛患者急救流程
评论
0/150
提交评论