从c&cpp的角度总结python语法,并作为工具书查询使用
大部分复制至菜鸟教程,有删减
python中的字符串利用'或"包围起来,两者没有特殊的区别在常值字符串前使用r可以让反斜杠不发生转义
使用[a:b]来截断[a,b)范围内即s[a]-s[b-1]的字符串若留空,则意味着取到首或尾,如[1:]表示包含s[1]及其之后的字符串特别地,可以用[-l:]来截断后l个字符的字符串,其中-1是最后一个字符的索引值
格式化字符串与c/cpp相同,参数则有一定的格式,如"%d%d"%(1,2),在字符串后使用%(...,...)的格式进行调用
f-string是python3.6之后版本添加的,称之为字面量格式化字符串,是新的格式化字符串的语法。f-string格式化字符串以f开头,后面跟着字符串,字符串中的表达式用大括号{}包起来,它会将变量或表达式计算后的值替换进去,实例如下:
其中访问类似于字符串,添加或删除则使用上面提到的函数进行加减即可
类似于map,是一个存储键值对的数据结构
使用{key:value,...}进行初始化
如下程序所示
利用一个列表来构建另一个列表,并可类推到字典、集合和元组的生成中
格式为[表达式for变量in列表if条件]
实例:
ifcondition_1:statement_block_1elifcondition_2:statement_block_2else:statement_block_3循环语句while语句while判断条件:执行语句...[else]执行语句...[else]部分可选,当while判断条件为False,则执行else对应的语句块,并跳出循环
for
NOP,没有任何操作
def函数名(参数列表):函数体return[表达式]结束函数,选择性地返回一个值给调用方,不带表达式的return相当于返回None
可用关键词来传递参数,此时无需考虑位置关系
使用par=sth,...的形式来传递参数
python中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。
加了星号*的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。
实例
直接导入整个模块,语法为
importmodule1[,module2[,...moduleN]导入的同时可在后面加上as...进行重命名
可以从模块中选择所需的函数导入所需的函数
frommodnameimportname1[,name2[,...nameN]]from…import*将目标模块直接导入当前的命名空间,在使用函数时不再需要模块名.目标函数的形式
frommodnameimport*__name__一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行。
注意name前后都是两个下划线__
Pythonopen()方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出OSError。
注意:使用open()方法一定要保证关闭文件对象,即调用close()方法。这点与c&cpp相同
open()函数常用形式是接收两个参数:文件名(file)和模式(mode)。
读取整行,包括“\n”字符。
将字符串写入文件,返回的是写入的字符长度。
向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。
关闭文件
classClassName:
类有多种的特殊的专有方法,在各种关键词时可以调用
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,按照惯例它的名称是self,这代表一个实例化的类对象
classTest:defprt(self):print(self)print(self.__class__)t=Test()t.prt()输出结构如下
<__main__.Testinstanceat0x100771878>__main__.Test其中self.__class__表示是类自身
classDerivedClassName(BaseClassName):
classDerivedClassName(modname.BaseClassName):同时可以通过增加BaseClass实现多继承
直接在派生类的定义中覆盖方法定义即可,与cpp的虚拟函数相同
迭代器是一种手动定义原类后自动生成的类,它可以根据某种顺序对类对象进行遍历或者实现某种迭代
主要有两种基本的方法:iter()和next()
返回该类的迭代器iterator对象,迭代器直接可以用在for...in...的循环中
__iter__()方法返回一个特殊的迭代器对象,这个迭代器对象实现了__next__()方法并通过StopIteration异常标识迭代的完成
__next__()方法返回下一个迭代器对象
classMyNumbers:def__iter__(self):self.a=1returnselfdef__next__(self):x=self.aself.a+=1returnxStopIterationStopIteration异常用于标识迭代的完成,防止出现无限循环的情况,在__next__()方法中我们可以设置在完成指定循环次数后触发StopIteration异常来结束迭代。
classMyNumbers:def__iter__(self):self.a=1returnselfdef__next__(self):ifself.a<=20:x=self.aself.a+=1returnxelse:raiseStopIteration生成器在Python中,使用了yield的函数被称为生成器(generator)。
跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
在调用生成器运行的过程中,每次遇到yield时函数会暂停并保存当前所有的运行信息,返回yield的值,并在下一次执行next()方法时从当前位置继续运行。