收藏 分销(赏)

python语言基础概述PPT.ppt

上传人:天**** 文档编号:10250947 上传时间:2025-04-30 格式:PPT 页数:50 大小:1.64MB
下载 相关 举报
python语言基础概述PPT.ppt_第1页
第1页 / 共50页
python语言基础概述PPT.ppt_第2页
第2页 / 共50页
点击查看更多>>
资源描述
Python,语言基础,2019,年,7,月,目 录,流程控制工具,数据结构,模块与类,输入输出,01,02,03,04,流程控制工具:,if,for,while,等语法,01,流程控制工具,If,语句,If,语句中,可以有零个或多个,elif,部分,以及一个可选的,else,部分。关键字,elif,是,else if,的缩写,适合用于避免过多的缩进。一个,if.elif.elif.,序列可以看作是其他语言中的,switch,或,case,语句的替代。,流程控制工具,Python,中的,for,语句与,C,或,Pascal,中有一定的区别。,Python,中的,for,语句并不总是对算术递增的数值进行迭代(比如,Pascal,),或是可以定义迭代步骤和暂停条件(比如,C,),而是可以对任意序列进行迭代(比如列表或字符串),条目的迭代顺序与它们在序列中出现的顺序一致。,for,语句,流程控制工具,range(),函数,这是一个内置函数,可以用来遍历一个数字序列,也可以用来生成序列。比如,range(10),会生成,10,个值,组成一个长度为,10,的序列。,Range,也可以以另一个数字开头,或者以指定的幅度(可正可负)增加。,break,和,continue,Python,流程控制工具,break,语句用于跳出最近的,for,或,while,循环。对于循环语句中的,else,子句,它会在循环遍历完列表,(,使用,for),或是在条件变为假,(,使用,while),的时候被执行,但是不会在循环被,break,语句终止时被执行。,Continue,表示中止此次循环,下次循环继续。,7,2025/4/30 周三,pass,Python,流程控制工具,pass,语句什么也不做。当语法上需要一个语句,但程序需要什么动作也不做时,就可以使用它。,另一个可以使用,pass,语句的场合是在编写新的代码时作为一个函数或条件子句体的占位符。,8,2025/4/30 周三,定义函数,Python,流程控制工具,使用,def,来定义函数,它必须后跟函数名称和带括号的形式参数列表。构成函数体的语句从下一行开始,并且必须缩进。下面的例子就是创建一个输出任意范围内,Fibonacci,数列(斐波那契数列),:,无返回值,有返回值,在列表的最后添加一个新的元素,相当于:,result=result+a,9,2025/4/30 周三,函数定义的更多形式,Python,流程控制工具,参数默认值:最有用的形式是对一个或多个参数指定一个默认值。这样创建的函数,可以用比定义时允许的更少的参数调用,比如,:,这个函数可以通过几种方式调用,:,只给出必需的参数:,ask_ok(Do you really want to quit?),给出一个可选的参数:,ask_ok(OK to overwrite the file?,2),给出所有的参数:,ask_ok(OK to overwrite the file?,2,Come on,only yes or no!),in,:测试一个序列是否包含某个值,10,2025/4/30 周三,函数定义的更多形式,Python,流程控制工具,关键字参数:可以使用形如,kwarg=value,的关键字参数来调用函数。在函数调用中,关键字参数必须跟随在位置参数的后面。传递的所有关键字参数必须与函数接受的其中一个参数匹配(比如,actor,不是函数,parrot,的有效参数),它们的顺序并不重要。这也包括非可选参数(该例中为,voltage,)。,有效调用,:,关键字参数,无效调用,:,11,2025/4/30 周三,函数定义的更多形式,Python,流程控制工具,任意的参数列表:最后、最不常用的选项是可以使用任意数量的参数调用函数。这些参数会被包含在一个元组里。在可变数量的参数之前,可能会出现零个或多个普通参数。一般来说,这些可变参数将在形式参数列表的末尾,因为它们收集传递给函数的所有剩余输入参数。出现在*,args,参数之后的任何形式参数都是 仅关键字参数,也就是说它们只能作为关键字参数而不能是位置参数。,12,2025/4/30 周三,函数定义的更多形式,Python,流程控制工具,解包参数列表:当参数已经在列表或元组中但需要为需要单独位置参数的函数调用解包时,会发生相反的情况。例如,内置的,range(),函数需要单独的,start,和,stop,参数。如果它们不能单独使用,请使用*运算符编写函数调用以从列表或元组中解包参数,:,解包参数列表:以同样的方式,字典可以使用*运算符来提供关键字参数,:,13,2025/4/30 周三,函数定义的更多形式,Python,流程控制工具,Lamda,表达式:可以用,lambda,关键字来创建一个小的匿名函数。这个函数返回两个参数的和:,lambda a,b:a+b,。,Lambda,函数可以在需要函数对象的任何地方使用。它们在语法上限于单个表达式。从语义上来说,它们只是正常函数定义的语法糖。与嵌套函数定义一样,,lambda,函数可以引用包含范围的变量,:,上面的例子使用一个,lambda,表达式来返回一个函数。另一个用法是传递一个小函数作为参数,:,14,2025/4/30 周三,函数定义的更多形式,Python,流程控制工具,文档字符串:以下是有关文档字符串的内容和格式的一些约定:,第一行应该是对象目的的简要概述。为简洁起见,它不应显式声明对象的名称或类型,因为这些可通过其他方式获得(除非名称恰好是描述函数操作的动词)。这一行应以大写字母开头,以句点结尾。,如果文档字符串中有更多行,则第二行应为空白,从而在视觉上将摘要与其余描述分开。后面几行应该是一个或多个段落,描述对象的调用约定,它的副作用等。,Python,解析器不会从,Python,中删除多行字符串文字的缩进,因此处理文档的工具必须在需要时删除缩进。这是使用以下约定完成的。文档字符串第一行 之后 的第一个非空行确定整个文档字符串的缩进量。(我们不能使用第一行,因为它通常与字符串的开头引号相邻,因此它的缩进在字符串文字中不明显。)然后从字符串的所有行的开头剥离与该缩进,等效,的空格。缩进的行不应该出现,但是如果它们出现,则应该剥离它们的所有前导空格。应在扩展标签后测试空白的等效性(通常为,8,个空格)。,下面是一个多行文档字符串的例子,:,15,2025/4/30 周三,函数定义的更多形式,Python,流程控制工具,函数标注:函数标注是关于用户自定义函数中使用的类型的完全可选元数据信息。它以字典的形式存放在函数的,_annotations_,属性中,并且不会影响函数的任何其他部分。形参标注的定义方式是在形参名称后加上冒号,后面跟一个表达式,该表达式会被求值为标注的值。返回值标注的定义方式是加上一个组合符号,-,,后面跟一个表达式,该标注位于形参列表和表示,def,语句结束的冒号之间。下面的示例有一个位置参数,一个关键字参数以及返回值带有相应标注,:,16,2025/4/30 周三,循环的技巧,Python,流程控制工具,当在字典中循环时,用,items(),方法可将关键字和对应的值同时取出,当在序列中循环时,用,enumerate(),函数可以将索引位置和其对应的值同时取出,当同时在两个或更多序列中循环时,可以用,zip(),函数将其内元素一一匹配。,17,2025/4/30 周三,循环的技巧,Python,流程控制工具,当逆向循环一个序列时,先正向定位序列,然后调用,reversed(),函数,如果要按某个指定顺序循环一个序列,可以用,sorted(),函数,它可以在不改动原序列的基础上返回一个新的排好序的序列,有时可能会想在循环时修改列表内容,一般来说改为创建一个新列表是比较简单且安全的。,18,2025/4/30 周三,条件控制,Python,流程控制工具,while,和,if,条件句中可以使用任意操作,而不仅仅是比较操作。,比较操作符,in,和,not in,校验一个值是否在(或不在)一个序列里。操作符,is,和,is not,比较两个对象是不是同一个对象,这只跟像列表这样的可变对象有关。所有的比较操作符都有相同的优先级,且这个优先级比数值运算符低。,比较操作可以传递。例如,a b=c,会校验是否,a,小于,b,并且,b,等于,c,。,比较操作可以通过布尔运算符,and,和,or,来组合,并且比较操作(或其他任何布尔运算)的结果都可以用,not,来取反。这些操作符的优先级低于比较操作符;在它们之中,,not,优先级最高,,or,优先级最低,因此,A and not B or C,等价于,(A and(not B)or C,。和之前一样,你也可以在这种式子里使用圆括号。,布尔运算符,and,和,or,也被称为 短路 运算符:它们的参数从左至右解析,一旦可以确定结果解析就会停止。例如,如果,A,和,C,为真而,B,为假,那么,A and B and C,不会解析,C,。当作用于普通值而非布尔值时,短路操作符的返回值通常是最后一个变量。,也可以把比较操作或者逻辑表达式的结果赋值给一个变量,例如,19,2025/4/30 周三,序列和其他类型的比较,Python,流程控制工具,序列对象可以与相同类型的其他对象比较。它们使用字典顺序进行比较:首先比较两个序列的第一个元素,如果不同,那么这就决定了比较操作的结果。如果它们相同,就再比较每个序列的第二个元素,以此类推,直到穷尽其中一个序列。如果要比较的两个元素本身就是相同类型的序列,那么就递归进行字典顺序比较。如果两个序列中所有的元素都相等,那么我们认为这两个序列相等。如果一个序列是另一个序列的初始子序列,那么短序列就小于另一个。字典顺序对字符串来说,是使用单字符的,Unicode,码的顺序。下面是同类型序列之间比较的例子,注意对不同类型对象来说,只要提供了合适的比较方法,就可以使用,来比较。例如,混合数值类型是通过他们的数值进行比较的,所以,0,等于,0.0,,以此类推。否则,解释器将显示,TypeError,异常,而不是随便给出一个结果。,20,2025/4/30 周三,Python,的数据结构,02,数字,将,Python,作为计算器使用,,python,数字的整数为,int,型,浮点型为,float,。包含多种混合类型运算数的运算会把整数转换成浮点数。,加减乘除、乘方(*),在交互模式下,上一次打印出来,的表达式被赋值给变量,_,Python,的数据结构,22,2,字符串,字符串有多种形式,使用单引号(,)和双引号(,”,)都可以获得同样的结果。,在交互式解释器中,输出的字符串外面会加上引号,特殊字符会使用反斜杠来转义。虽然有时这看起来会与输入不一样(外面所加的引号可能会改变),但两个字符串是相同的。如果字符串中有单引号而没有双引号,该字符串外将加双引号来表示,否则就加单引号。,print(),函数会生成可读性更强的输出,即略去两边的引号,并且打印出经过转义的特殊字符,:,Python,的数据结构,23,2,字符串,如果不希望前置了,的字符转义成特殊字符,可以使用 原始字符串 方式,在引号前添加,r,即可,:,字符串字面值可以跨行连续输入。一种方式是用三重引号:,.,或,.,。字符串中的回车换行会自动包含到字符串中,如果不想包含,在行尾添加一个,即可。如下例,:,输出结果如下:,Python,的数据结构,24,2,字符串,字符串可以用,+,进行连接(粘到一起),也可以用*进行重复,:,相邻的两个或多个 字符串字面值(引号引起来的字符)将会自动连接到一起,这样就可以把很长的字符串拆开分别输入。,注意:只能对两个字面值这样操作,变量或者表达式不行。如果想连接变量,或者连接变量和字面值,可以用,+,号:,Python,的数据结构,25,2,字符串的索引,字符串是可以被 索引(下标访问)的,第一个字符索引是,0,。单个字符并没有特殊的类型,只是一个长度为一的字符串,:,索引也可以用负数,这种会从右边开始数。注意,-0,和,0,是一样的,所以负数索引从,-1,开始。,内置函数,len(),返回一个字符串的长度,:,Python,的数据结构,26,2,列表,Python,中可以通过组合一些值得到多种 复合 数据类型。其中最常用的列表,可以通过方括号括起、逗号分隔的一组值得到。一个 列表 可以包含不同类型的元素,但通常使用时各个元素类型相同,:,列表也支持索引和切片。所有的切片操作会返回一个新列表,这个新列表包含所需要的元素,:,内置函数,len(),返回一个列表的长度,:,Python,的数据结构,27,2,列表,列表切片的赋值(可以改变列表大小,列表的嵌套,或者把整个列表清空):(创建包含其他列表的列表),列表可以通过,+,号拼接,也可以在列表结尾通过,append(),方法添加新元素,:,Python,的数据结构,28,2,几个简单的例子,编写斐波那契数列的初始子序列,第一行含有一个 多重赋值,:,变量,a,和,b,同时得到了新值,0,和,1,。最后一行又用了一次多重赋值,右手边的表达式是从左到右被求值的。,while,循环只要它的条件(这里指:,a 10,)保持为真就会一直执行。,Python,和,C,一样,任何非零整数都为真;零为假。这个条件也可以是字符串或是列表的值,事实上任何序列都可以;长度非零就为真,空序列就为假。标准的比较操作符的写法和,C,语言里是一样:,(大于)、,=,(等于)、,=,(大于或等于)以及,!=,(不等于)。,循环体是缩进的:缩进是,Python,组织语句的方式。,print(),函数将所有传进来的参数值打印出来,包括浮点数,字符串。字符串会打印不带引号的内容,并且在参数项之间会插入一个空格。,关键字参数,end,可以用来取消输出后面的换行,或是用另外一个字符串来结尾,向,print(),函数传多个参数,关键字参数,end,的使用,Python,的数据结构,29,2,列表的更多特性,append(x):,在列表的末尾添加一个元素。相当于,alen(a):=x,。,extend(iterable),:使用可迭代对象中的所有元素来扩展列表。相当于,alen(a):=iterable,。,insert(i,x),:在给定的位置插入一个元素。第一个参数是要插入的元素的索引,所以,a.insert(0,x),插入列表头部,,a.insert(len(a),x),等同于,a.append(x),。,list.remove(x),:移除列表中第一个值为,x,的元素。如果没有这样的元素,则输出,ValueError,异常。,list.pop(i),:删除列表中给定位置的元素并返回它。如果没有给定位置,,a.pop(),将会删除并返回列表中的最后一个元素。(,i,两边的方括号表示这个参数是可选的,而不是要求必须输入方括号,),。,list.clear(),:删除列表中所有的元素。相当于,del a:,。,list.index(x,start,end),:返回从,0,开始索引的列表中第一个值为,x,的元素。如果没有这样的元素将会输出,ValueError,异常。这里可选参数,start,和,end,是切片符号,用于将搜索限制为列表的特定子序列。返回的索引是相对于整个序列的开始计算的,而不是,start,参数。,list.count(x),:返回元素,x,在列表中出现的次数。,list.sort(key=None,reverse=False),:对列表中的元素进行排序。,list.reverse(),:反转列表中的元素。,list.copy(),:返回列表的一个浅拷贝。相当于,a:,。,Python,的数据结构,30,2,列表的更多特性,列表方法示例,Python,的数据结构,31,2,元组和序列,列表和字符串同属序列数据类型,而元组则属于另一种标准序列类型。一个元组由几个被逗号隔开的值组成,例如,:,元组在输出时总是被圆括号包围的,以便正确表示嵌套元组。输入时不要求一定要写圆括号,视情况而定。给元组中的一个单独的元素赋值是不允许的,当然可以创建包含可变对象的元组,例如列表。,Python,的数据结构,32,2,元组和序列,元组与列表的区别,:,元组是 不可变的,其序列通常包含不同种类的元素,并且通过解包或者索引来访问;列表是可变的,并且列表中的元素一般是同种类型的,并且通过迭代访问。,构造包含,0,个或,1,个元素的元组:空元组可以直接被一对空圆括号创建,含有一个元素的元组可以通过在这个元素后添加一个逗号来构建(圆括号里只有一个值的话不够明确)。例如,元组解包与打包:语句,t=12345,54321,hello!,是 元组打包 的一个例子:值,12345,54321,和,hello!,被打包进元组。其逆操作也就是解包:,x,y,z=t,Python,的数据结构,33,2,集合,集合是由不重复元素组成的无序的集。它的基本用法包括成员检测和消除重复元素。集合对象也支持像联合,交集,差集,对称差分等数学运算。,花括号或,set(),函数可以用来创建集合。注意:要创建一个空集合你只能用,set(),而不能用,,因为后者是创建一个空字典。,类似于 列表推导式,集合也支持推导式形式,Python,的数据结构,34,2,字典,字典是,Python,內置数据类型,它在其他语言里可能会被叫做联合内存或联合数组。与以连续整数为索引的序列不同,字典是以关键字为索引的,关键字可以是任意不可变类型,通常是字符串或数字。如果一个元组只包含字符串、数字或元组,那么这个元组也可以用作关键字。但如果元组直接或间接地包含了可变对象,那么它就不能用作关键字。列表不能用作关键字,因为列表可以通过索引、切片或,append(),和,extend(),之类的方法来改变。,理解字典的最好方式,就是将它看做是一个键,:,值对的集合,键必须是唯一的(在一个字典中)。一对花括号可以创建一个空字典:,。另一种初始化字典的方式是在一对花括号里放置一些以逗号分隔的键值对,而这也是字典输出的方式。,字典主要的操作是使用关键字存储和解析值。也可以用,del,来删除一个键值对。如果你使用了一个已经存在的关键字来存储值,那么之前与这个关键字关联的值就会被遗忘。用一个不存在的键来取值则会报错。,对一个字典执行,list(d),将返回包含该字典中所有键的列表,按插入次序排列,(,如需其他排序,则要使用,sorted(d),。要检查字典中是否存在一个特定键,可使用,in,关键字。,Python,的数据结构,35,2,字典,使用字典的一些简单示例,dict(),构造函数可以直接从键值对序列里创建字典;,字典推导式可以从任意的键值表达式中创建字典;,当关键字是简单字符串时,有时直接通过关键字参数来制定键值对更方便,Python,的数据结构,36,2,模块与类,03,模块的定义,脚本:如果从,Python,解释器退出并再次进入,之前的定义(函数和变量)都会丢失。因此,如果想编写一个稍长些的程序,最好使用文本编辑器为解释器准备输入并将该文件作为输入运行。这被称作编写 脚本。,模块:随着脚本原来越长,用户或许会想把它拆分成几个文件,以方便维护。也有可能是想在不同的程序中使用同一个函数,而不必把这个函数复制到每一个程序中去,Python,有一种方法可以把定义放在一个文件里,并在脚本或解释器的交互式实例中使用它们。这样的文件被称作模块,它可以被导入到其它模块或者主模块中。,模块是一个包含,Python,定义和语句的文件。文件名就是模块名后跟文件后缀,.py,。在一个模块内部,模块名(字符串)可以通过全局变量,_name_,的值获得。,模块与类,38,2,模块的导入方法,例如,以下是一个名为,fibo.py,的脚本:,该脚本的导入命令为:,import fibo,访问,fibo,模块中函数的方法为:,对于经常使用的某个函数,也可以把它赋值给一个局部变量:,模块与类,39,2,模块的导入方法,import,语句有一个变体,它可以把名字从一个被调模块内直接导入到现模块的符号表里(如下例),这并不会把被调模块名引入到局部变量表里(因此在这个例子里,,fibo,是未被定义的)。,还有一个变体甚至可以导入模块内定义的所有名称,用,import,*会调入所有非以下划线(,_,)开头的名称。不过最好不要使用这个功能,因为它在解释器中引入了一组未知的名称,而它们很可能会覆盖一些你已经定义过的东西,而且也会导致代码可读性很差。,如果模块名称之后带有,as,,则跟在,as,之后的名称将直接绑定到所导入的模块。比如下面这个例子,会和,import fibo,方式一样有效地调入模块,唯一的区别是它以,fib,的名称存在的。,模块与类,40,2,以脚本的方式执行模块,在模块末尾添加这些代码:,这样该文件既可以作为脚本来执行,又可以当作一个可调用的模块来使用。因为这段解析命令行的代码只有在当模块是以,”main”,文件的方式执行的时候才会运行。,在命令行输入,python fibo.py,,模块里的代码会被执行,就像是导入了模块一样,,_name_,会被赋值为,_main_,。,如果直接导入该模块(,import fibo,),那么末尾添加的代码是不会运行的。,模块与类,41,2,包的定义,包是一种通过用“带点号的模块名”来构造,Python,模块命名空间的方法。例如,模块名,A.B,表示,A,包中名为,B,的子模块,这样就可以区分不同的软件包中名称一样的模块。,假设你想为声音文件和声音数据的统一处理,设计一个模块集合(一个“包”)。这个包里有两个模块,分别用于处理文件格式和处理声音数据,具体结构如下:,模块与类,42,2,包的导入,当导入包时,,Python,搜索,sys.path,里的目录,查找包的子目录。,必须要有,_init_.py,文件才能让,Python,将包含该文件的目录当作包。在最简单的情况下,,_init_.py,可以只是一个空文件。,包的用户可以从包中导入单个模块,例如,:import sound.effects.echo,这会加载子模块,sound.effects.echo,,但引用它时必须使用它的全名:,sound.effects.echo.echofilter(input,output,delay=0.7,atten=4),导入子模块的另外一种方法:,from sound.effects import echo,这也会加载子模块,echo,,并使其在没有包前缀的情况下可用,因此可以按如下方式使用,:echo.echofilter(input,output,delay=0.7,atten=4),第三种形式是直接导入所需的函数或者变量:,from sound.effects.echo import echofilter,同样,这也会加载子模块,echo,,但这会使其函数,echofilter(),直接可用,:echofilter(input,output,delay=0.7,atten=4),注意,当使用,from package import item,时,,item,可以是包的子模块(或子包),也可以是包中定义的其他名称,如函数,类或变量。,import,语句首先测试是否在包中定义了,item,;如果没有,它假定它是一个模块并尝试加载它。如果找不到它,则报错:,ImportError,异常。相反,当使用,import item.subitem.subsubitem,这样的语法时,除了最后一项之外的每一项都必须是一个包;最后一项可以是模块或包,但不能是前一项中定义的类或函数或变量。,模块与类,43,2,输入输出,04,输入输出,格式化输出,在字符串的开始引号或三引号之前加上一个,f,或,F,,对于可以应用的变量,用,括起来。比如:,利用字符串的,str.format(),制定输出格式。使用,和,来标记变量将被替换的位置,以及格式化信息。,可以使用字符串切片和连接操作自己完成所有的字符串处理,对于想快速显示某些变量以进行调试时,可以使用,repr(),或者,str(),函数将任何值转化为字符串。,45,2,输入输出,格式化输出,几个例子:,46,2,读写文件,open(),返回一个,file object,,最常用的有两个参数:,open(filename,mode),。例:,f=open(workfile,w),第一个参数是文件名,第二个参数,mode,可以是,r,,表示文件只能读取,,w,表示只能写入(已存在的同名文件会被删除),还有,a,表示打开文件以追加内容;任何写入的数据会自动添加到文件的末尾。,r+,表示打开文件进行读写。,mode,参数是可选的,省略时默认为,r,。,通常文件是以,text mode,打开的,这意味着从文件中读取或写入字符串时,都会以指定的编码方式进行编码。如果未指定编码格式,默认为文本格式。在,mode,中追加的,b,则以,binary mode,打开文件,本例中数据是以字节对象的形式进行读写的。,在文本模式下读取时,默认会把平台特定的行结束符,(Unix,上的,n,Windows,上的,rn),转换为,n,。在文本模式下写入时,默认会把出现的,n,转换回平台特定的结束符。这样在幕后修改文件数据对文本文件来说没有问题,但是会破坏二进制数据,例如,jpeg,或,exe,文件中的数据,因此在读写此类文件时应使用二进制模式。,输入输出,47,2,读写文件,在处理文件对象时,最好使用,with,关键字。这样的优点是即使在某个时刻出现了异常,当子句体结束后文件也会正确关闭。而且使用,with,相比等效的,try-finally,代码块要简短得多,:,如果没有使用,with,关键字,那么在文件结束后,应该调用,f.close(),来关闭文件并立即释放它使用的所有系统资源。如果没有主动关闭文件,,Python,的垃圾回收器最终也会关闭该文件并释放相应的资源,但这个文件可能会保持打开状态一段时间。而且不同的,Python,场景会在不同的时间进行清理。,通过,with,语句或者调用,f.close(),关闭文件对象后,尝试使用该文件对象将自动失败,:,输入输出,48,2,文件对象的方法,要读取文件内容,需调用,f.read(size),,它会读取一些数据并将其作为字符串(在文本模式下)或字节对象(在二进制模式下)返回。,size,是一个可选的数字参数。当,size,被省略或者为负的时候,将读取并返回文件的整个内容;如果文件的大小是机器内存的两倍,那么就可能出现问题。否则,最多读取并返回,size,字节的内容,如果已到达文件末尾,,f.read(),将返回一个空字符串,(),。,f.readline(),:从文件中读取一行;换行符(,n,)留在字符串的末尾,如果文件不以换行符结尾,则在文件的最后一行省略。这使得返回值明确无误;如果,f.readline(),返回一个空的字符串,则表示已经到达了文件末尾,而空行使用,n,表示,该字符串只包含一个换行符。,通过,with,语句或者调用,f.close(),关闭文件对象后,尝试使用该文件对象将自动失败,:,输入输出,49,2,谢,谢,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服