Python3提升教程一个人整理.docx
- 文档编号:23622546
- 上传时间:2023-05-19
- 格式:DOCX
- 页数:17
- 大小:207.42KB
Python3提升教程一个人整理.docx
《Python3提升教程一个人整理.docx》由会员分享,可在线阅读,更多相关《Python3提升教程一个人整理.docx(17页珍藏版)》请在冰豆网上搜索。
Python3提升教程一个人整理
Python3迭代器与生成器
迭代器
迭代是Python最强大的功能之一,是访问集合元素的一种方式。
迭代器是一个可以记住遍历的位置的对象。
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。
迭代器只能往前不会后退。
迭代器有两个基本的方法:
iter() 和 next()。
字符串,列表或元组对象都可用于创建迭代器:
迭代器对象可以使用常规for语句进行遍历:
执行以上程序,输出结果如下:
1234
也可以使用next()函数:
执行以上程序,输出结果如下:
1
2
3
4
创建一个迭代器
把一个类作为一个迭代器使用需要在类中实现两个方法__iter__()与__next__()。
如果你已经了解的面向对象编程,就知道类都有一个构造函数,Python的构造函数为__init__(),它会在对象初始化的时候执行。
__iter__()方法返回一个特殊的迭代器对象,这个迭代器对象实现了__next__()方法并通过StopIteration异常标识迭代的完成。
__next__()方法(Python2里是next())会返回下一个迭代器对象。
创建一个返回数字的迭代器,初始值为1,逐步递增1:
执行输出结果为:
1
2
3
4
5
StopIteration
StopIteration异常用于标识迭代的完成,防止出现无限循环的情况,在__next__()方法中我们可以设置在完成指定循环次数后触发StopIteration异常来结束迭代。
在20次迭代后停止执行:
执行输出结果为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
生成器
在Python中,使用了yield的函数被称为生成器(generator)。
跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
在调用生成器运行的过程中,每次遇到yield时函数会暂停并保存当前所有的运行信息,返回yield的值,并在下一次执行next()方法时从当前位置继续运行。
调用一个生成器函数,返回的是一个迭代器对象。
以下实例使用yield实现斐波那契数列:
执行以上程序,输出结果如下:
011235813213455
Python3函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。
你已经知道Python提供了许多内建函数,比如print()。
但你也可以自己创建函数,这被叫做用户自定义函数。
定义一个函数
你可以定义一个由自己想要功能的函数,以下是简单的规则:
∙函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
∙任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
∙函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
∙函数内容以冒号起始,并且缩进。
∙return[表达式] 结束函数,选择性地返回一个值给调用方。
不带表达式的return相当于返回None。
语法
Python定义函数使用def关键字,一般格式如下:
def函数名(参数列表):
函数体
默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。
实例
让我们使用函数来输出"HelloWorld!
":
更复杂点的应用,函数中带上参数变量
以上实例输出结果:
WelcomeRunoob
width=4height=5area=20
函数调用
定义一个函数:
给了函数一个名称,指定了函数里包含的参数,和代码块结构。
这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python命令提示符执行。
如下实例调用了 printme() 函数:
以上实例输出结果:
我要调用用户自定义函数!
再次调用同一函数
参数传递
在python中,类型属于对象,变量是没有类型的:
a=[1,2,3]
a="zuomu"
以上代码中,[1,2,3] 是List类型,"Runoob" 是String类型,而变量a是没有类型,她仅仅是一个对象的引用(一个指针),可以是指向List类型对象,也可以是指向String类型对象。
可更改(mutable)与不可更改(immutable)对象
在python中,strings,tuples,和numbers是不可更改的对象,而list,dict等则是可以修改的对象。
∙不可变类型:
变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个int值对象10,再让a指向它,而5被丢弃,不是改变a的值,相当于新生成了a。
∙可变类型:
变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将listla的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。
python函数的参数传递:
∙不可变类型:
类似c++的值传递,如整数、字符串、元组。
如fun(a),传递的只是a的值,没有影响a对象本身。
比如在fun(a)内部修改a的值,只是修改另一个复制的对象,不会影响a本身。
∙可变类型:
类似c++的引用传递,如列表,字典。
如fun(la),则是将la真正的传过去,修改后fun外部的la也会受影响
python中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。
python传不可变对象实例
实例中有int对象2,指向它的变量是b,在传递给ChangeInt函数时,按传值的方式复制了变量b,a和b都指向了同一个Int对象,在a=10时,则新生成一个int值对象10,并让a指向它。
传可变对象实例
可变对象在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变了。
例如:
传入函数的和在末尾添加新内容的对象用的是同一个引用。
故输出结果如下:
函数内取值:
[10,20,30,[1,2,3,4]]
函数外取值:
[10,20,30,[1,2,3,4]]
参数
以下是调用函数时可使用的正式参数类型:
∙必需参数
∙关键字参数
∙默认参数
∙不定长参数
必需参数
必需参数须以正确的顺序传入函数。
调用时的数量必须和声明时的一样。
调用printme()函数,你必须传入一个参数,不然会出现语法错误:
以上实例输出结果:
Traceback(mostrecentcalllast):
File"test.py",line10,in
printme()
TypeError:
printme()missing1requiredpositionalargument:
'str'
关键字参数
关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为Python解释器能够用参数名匹配参数值。
以下实例在函数printme()调用时使用参数名:
以上实例输出结果:
菜鸟教程
以下实例中演示了函数参数的使用不需要使用指定顺序:
以上实例输出结果:
名字:
runoob
年龄:
50
默认参数
调用函数时,如果没有传递参数,则会使用默认参数。
以下实例中如果没有传入age参数,则使用默认值:
以上实例输出结果:
名字:
zuomu
年龄:
23
------------------------
名字:
zuomu
年龄:
23
不定长参数
你可能需要一个函数能处理比当初声明时更多的参数。
这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名。
基本语法如下:
deffunctionname([formal_args,]*var_args_tuple):
"函数_文档字符串"
function_suite
return[expression]
加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。
以上实例输出结果:
输出:
70
(60,50)
如果在函数调用时没有指定参数,它就是一个空元组。
我们也可以不向函数传递未命名的变量。
如下实例:
以上实例输出结果:
输出:
10
输出:
70
60
50
还有一种就是参数带两个星号 **基本语法如下:
deffunctionname([formal_args,]**var_args_dict):
"函数_文档字符串"
function_suite
return[expression]
加了两个星号 ** 的参数会以字典的形式导入。
以上实例输出结果:
输出:
1
{'a':
2,'b':
3}
声明函数时,参数中星号 * 可以单独出现,例如:
deff(a,b,*,c):
returna+b+c
如果单独出现星号 * 后的参数必须用关键字传入。
>>>deff(a,b,*,c):
...returna+b+c
...
>>>f(1,2,3)#报错
Traceback(mostrecentcalllast):
File"
TypeError:
f()takes2positionalargumentsbut3weregiven
>>>f(1,2,c=3)#正常
6
>>>
匿名函数
python使用lambda来创建匿名函数。
所谓匿名,意即不再使用def语句这样标准的形式定义一个函数。
∙lambda只是一个表达式,函数体比def简单很多。
∙lambda的主体是一个表达式,而不是一个代码块。
仅仅能在lambda表达式中封装有限的逻辑进去。
∙lambda函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
∙虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
语法
lambda函数的语法只包含一个语句,如下:
lambda[arg1[,arg2,.....argn]]:
expression
如下实例:
以上实例输出结果:
相加后的值为:
30
相加后的值为:
40
return语句
return[表达式] 语句用于退出函数,选择性地向调用方返回一个表达式。
不带参数值的return语句返回None。
之前的例子都没有示范如何返回数值,以下实例演示了return语句的用法:
以上实例输出结果:
函数内:
30
函数外:
30
强制位置参数
Python3.8新增了一个函数形参语法/用来指明函数形参必须使用指定位置参数,不能使用关键字参数的形式。
在以下的例子中,形参a和b必须使用指定位置参数,c或d可以是位置形参或关键字形参,而e或f要求为关键字形参:
deff(a,b,/,c,d,*,e,f):
print(a,b,c,d,e,f)
以下使用方法是正确的:
f(10,20,30,d=40,e=50,f=60)
以下使用方法会发生错误:
f(10,b=20,c=30,d=40,e=50,f=60)#b不能使用关键字参数的形式
f(10,20,30,40,50,f=60)#e必须使用关键字参数的形式
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Python3 提升 教程 一个人 整理