ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Python基础语法(二):函数封装与核心数据结构

Python基础语法(二):函数封装与核心数据结构 文章目录一.函数1.1语法格式1.2 函数参数1.3 函数返回值1.4变量的作用域1.5 函数递归1.6 参数默认值1.7 关键字参数二.列表2.1创建列表2.2 访问下标2.3 切片操作2.4 遍历列表元素2.5 新增元素2.6 查找元素2.7 删除元素2.8 连接列表三.元组四.字典4.1 创建字典4.2 查找字典4.3 新增/修改元素4.4 删除元素4.5 遍历字典元素4.6 合法的key类型三.文件3.1 文件路径3.2 文件操作3.3 写文件3.4 读文件3.5 使用上下文管理器一.函数编程中的函数是一段可以被重复利用的代码片段1.1语法格式创建函数语法格式:def函数名(形参列表):函数体return返回值调用函数#不考虑返回值函数名(实参列表)# 考虑返回值返回值函数名(实参列表)1.2 函数参数在函数定义的时候,可以在()中指定形式参数,然后在调用的时候,由调用者把实际参数传递进去示例1:defcal(beg,end):sum0foriinrange(beg,end1):sumiprint(sum)cal(1,100)cal(300,400)上面代码中beg,end就是函数的形参,(1, 100)和(300, 400)就是函数的实参一个函数可以有一个形参,也可以有多个形参,也可以没有形参一个函数的形参有几个,传递实参的时候也得传几个,个数要匹配上1.3 函数返回值函数的参数可以视为是函数的输入,则函数的返回值,就可以视为是函数的输出示例1defcla(beg,end):sum0foriinrange(beg,end1):sumireturnsumresultcla(1,100)print(result)示例2判定是否是奇数defisOdd(num):ifnum%20:returnFalseelse:returnTrueresultisOdd(10)print(result)一个函数中可以有多个return语句示例3defgetPoint():x10y20returnx,y a,bgetPoint()print(a,b)一个函数是可以一次返回多个返回值的,使用,来分割多个返回值如果只想要其中的部分返回值,可以使用_来忽略不想要的返回值1.4变量的作用域1.变量只能在所在的函数内部生效示例1defgetPoint():x10y20returnx,y getPoint()print(x,y)所以这里函数内部的变量x,y并不能在超出函数范围外生效2.在不同的作用域中,允许存在同名的变量示例1x10defgetPoint():x20print(f函数内部x {x})getPoint()在函数内部的变量也称为局部变量不在任何函数内部的变量,也称为全局变量3.如果函数内部尝试访问的局部变量不存在,就会尝试去全局作用域中查找示例1x10defgetPoint():print(f函数内部x {x})getPoint()print(f函数外部x {x})4.如果想在函数内部,修改全局变量的值,需要使用global关键字声明x10defgetPoint():globalx x20print(f函数内部x {x})getPoint()print(f函数外部x {x})1.5 函数递归递归是嵌套调用的一种特殊情况,即一个函数嵌套调用自己示例1递归计算5!deffactor(n):ifn1:return1returnn*factor(n-1)resultfactor(5)print(result)注意事项存在递归结束条件,比如if n 1就是结束条件,当n为1的时候,递归就结束了每次递归的时候,要保证函数的实参是逐渐逼近结束条件的1.6 参数默认值Python中的函数,可以给形参指定默认值带有默认值的参数,可以在调用的时候不传参示例1计算两个数字的和defadd(x,y,debugFalse):ifdebug:print(f调式信息: x {x}, y {y})returnxyprint(add(10,20))print(add(10,20,True))此处debugFalse即为参数的默认值带有默认值的参数需要放到没有默认值的参数后面1.7 关键字参数在调用函数的时候,需要给函数指定实参,一般默认情况下是按照形参的顺序,来依次传递实参的,但是,我们也可以通过关键字参数,来调整这里的传参顺序,显示的指定当前实参传递给哪个形参示例1deftest(x,y):print(fx {x})print(fy {y})test(x10,y20)test(y100,x200)二.列表列表list是一种内置的、有序的、可变的序列容器用来存放多个元素。元素可以是任意类型也可以重复、嵌套2.1创建列表1.[]表示一个空的列表alist[]2.用list方法创建alistlist()3.列表存放元素是允许存放不同的类型a[1,hello,True]2.2 访问下标1.可以通过下标访问操作符[ ]来获取到列表中的任意元素示例1获取第一个元素a[1,2,3,4]print(a[0])2.通过下标修改元素的值示例1a[1,2,3,4]a[0]helloprint(a)3.如果下标超出列表的有效范围,会抛出异常a[1,2,3,4]print(a[100])4.下标可以取负数,表示倒数第几个元素示例1取倒数第一个元素a[1,2,3,4]print(a[-1])2.3 切片操作通过刚刚上述的下标操作,是一次从列表里面取出一个元素通过切片,则是一次取出一组连续的元素,相当于得到一个子列表1.使用[ : ]的方式来进行切片操作示例1a[1,2,3,4]# 1:3表示[1,3),前闭后开print(a[1:3])2.切片操作中可以省略前后边界示例1a[1,2,3,4]print(a[1:])print(a[:2])print(a[:])3.切片操作中还可以指定步长,也就是每访问一个元素后,下标自增几步示例1a[1,2,3,4,5,6,7,8,9]print(a[::2])print(a[::3])4.切片操作的步长也可以是负数,此后是从后往前进行取元素,表示每访问一个元素之后,下标自减几步示例1a[1,2,3,4,5,6,7,8,9]print(a[::-2])print(a[::-3])5.如果切片中填写的数字越界了,不会有负面效果,只会尽可能把满足条件条件的元素切进去示例1a[1,2,3,4,5,6,7,8,9]print(a[100:200])2.4 遍历列表元素1.最简单的办法就是使用for循环a[1,2,3,4]forelemina:print(elem)2.用for循环按下标访问a[1,2,3,4]foriinrange(0,len(a)):print(a[i])3.可以使用while循环,手动控制下标变化a[1,2,3,4]i0whileilen(a):print(a[i])i12.5 新增元素使用append方法,向列表末尾插入一个元素(尾插)a[1,2,3,4]a.append(hello)print(a)使用insert方法,在任意位置插入一个元素a[1,2,3,4]a.insert(1,hello)print(a)2.6 查找元素使用in操作符,判定元素是否在列表中存在,返回值是布尔类型a[1,2,3,4]print(2ina)print(7ina)2.使用index方法,查找元素在列表中的下标,返回值是一个整数,如果元素不在会抛异常a[1,2,3,4]print(a.index(2))返回2这个元素在列表中的下标2.7 删除元素1.使用pop方法删除最末尾元素a[1,2,3,4]a.pop()print(a)2.pop方法也能按照下标来删除元素a[1,2,3,4]a.pop(1)print(a)3.使用remove方法,按照值删除元素a[1,2,3,4]a.remove(2)print(a)2.8 连接列表1.使用extend方法,相当于把一个列表拼接到另一个列表后面alist[1,2,3,4]blist[5,6,7]alist.extend(blist)print(alist)print(blist)三.元组元组的功能和列表相比,基本是一致的1.元组使用()来表示atuple()atupletuple()2.元组不能修改里面的元素,列表可以修改里面的元素像读操作,比如访问下标,切片,遍历,in,index,等,元组也是支持的像写操作,比如新增元素,修改元素,删除元素,extend,元组不能支持3.元组在python中很多时候是默认的集合类型示例1defgetPoint():return10,20resultgetPoint()print(type(result))四.字典字典是一种存储键值对的结构4.1 创建字典1.创建一个空字典,使用{}表示字典a{}bdict()print(type(a))print(type(b))2.键值对之间使用逗号分割,键和值之间使用***(冒号)分割示例1student{id:1,name:zhangsan}print(student)最后一个键值对的逗号可以不用写4.2 查找字典1.使用in可以判定key是否在字典中存在,返回布尔值student{id:1,name:zhangsan}print(idinstudent)print(calssinstudent)2.使用[ ]通过类似于取下标的方式,获取到元素的值,只不过此处的下标是keystudent{id:1,name:zhangsan}print(student[id])print(student[name])如果key在字典中不存在会抛出异常示例1student{id:1,name:zhangsan}print(student[class])4.3 新增/修改元素使用[ ]可以根据key来新增和修改value1.如果key不存在,对取下标操作赋值,即为新增键值对student{id:1,name:lisi}student[score]90print(student)2.1.如果key已经存在,对取下标操作赋值,即为修改键值对的值student{id:1,name:lisi,score:80}student[score]90print(student)4.4 删除元素使用pop方法根据key删除对应的键值对student{id:1,name:lisi,score:80}student.pop(score)print(student)4.5 遍历字典元素直接使用for循环能够获取到字典重点所有的key,进一步就可以取出每一个值示例1student{id:1,name:lisi,score:80}forkeyinstudent:print(key,student[key])2.使用keys方法取出字典中的所有keystudent{id:1,name:lisi,score:80}print(student.keys())3.使用values方法可以获取到字典中的所有valuestudent{id:1,name:lisi,score:80}print(student.values())4.使用items方法可以获取到字典中的所有键值对student{id:1,name:lisi,score:80}print(student.items())4.6 合法的key类型不是所有类型都可以作为字典的key,字典的本质是一个哈希表,哈希表的key要求是可哈希的,也就是可以计算出一个哈希值1.可以使用hash函数来计算某个对象的哈希值,能够计算出哈希值的类型,都可以作为字典的key示例1print(hash(hello))print(hash(True))print(hash(0))print(hash(()))2.列表无法计算哈希值print(hash([1,2,3]))3.字典也无法计算哈希值print(hash({id:1}))三.文件3.1 文件路径一个机器上会存很多文件,为了让这些文件更方便被组织,往往会使用很多文件夹(也叫目录)来整理文件为了方便确定一个文件所在的位置,使用文件路径来描述示例1: 文件的绝对路径:D:\CSDN\备用.txt3.2 文件操作要使用文件主要是通过文件来保存数据,并且在后续把保存的数据读取出来想要读写文件,需要先打开文件,读写完毕之后要关闭文件1.打开文件使用内建函数open打开一个文件fopen(D:/CSDN/备用.txt,r)1.第一个参数是一个字符串,表示要打开文件的路径2.第二个参数是一个字符串,表示打开方式,其中r表示按照读的方式打开,w表示按照写的方式打开,a表示按照追加的方式打开3.如果打开文件成功,返回一个文件对象,后续的读文件操作都是围绕这个文件对象展开4.如果打开文件失败(比如指定的文件不存在)就会抛出异常2.关闭文件使用close方法关闭已经打开的文件f.close()使用完毕文件要及时关闭,一个程序能同时打开的文件个数,是存在上限的示例1flist[]count0whileTrue:fopen(D:/CSDN/备用.txt,r)flist.append(f)count1print(fcount{count})上述代码中,使用一个列表来保存了所有的文件对象,如果不进行保存,那么python中的内存的垃圾回收机制,会在文件对象销毁的时候自动关闭文件但是由于垃圾回收操作不一定及时,所以我们写代码仍要考虑手动关闭,尽量避免依赖自动关闭3.3 写文件文件打开之后,就可以写文件了1.写文件,要使用写的方式打开,open的第二个参数要为’w’,使用write的方法写入文件fopen(D:\CSDN\备用.txt,w)f.write(hello csdn)f.close()用记事本打开当前路径下的文本文件,可以看到文件刚写入进去的内容注意:使用’w’一旦打开文件成功,就会清空文件原有的数据示例:比如刚刚记事本中的文本内容是hello csdn,现在我重新使用’w’打开,来看之前的内容是否存在fopen(D:\CSDN\备用.txt,w)f.close()此时,记事本中的内容已被清空3.使用’a’方式实现’追加写’,此时原有的内容不变,写入的内容会被追加到之前文件内容的末尾示例现在记事本中有这几个字fopen(D:\CSDN\备用.txt,a)f.write(I love you)f.close()4.针对已经关闭的文件对象进行写操作,也会抛出异常示例fopen(D:\CSDN\备用.txt,a)f.write(I love you)f.close()f.write(hello)3.4 读文件1.读取文件使用’r’的方式打开文件,使用read方法完成读操作,参数表示读取几个字符示例目前记事本中的内容如下fopen(D:\CSDN\备用.txt,r,encodingutf-8)resultf.read(2)print(result)f.close()2.如果是多行文本,可以使用for循环一次读取一行示例1fopen(D:\CSDN\备用.txt,r,encodingutf-8)forlineinf:print(line)f.close()3.使用readlines直接把整个内容读取出来,返回一个列表,每个元素即为一行示例fopen(D:\CSDN\备用.txt,r,encodingutf-8)linesf.readlines()print(lines)f.close()3.5 使用上下文管理器打开文件之后,是很容易忘记关闭的,Python提供了上下文管理器,帮助程序员自动关闭文件使用with语句打开文件当with内部的代码执行完毕后,就会自动调用关闭方法示例withopen(D:\CSDN\备用.txt,r,encodingutf-8)asf:linesf.readlines()print(lines)码字不易如果觉得本文对你有所帮助请点赞、收藏、加关注支持一下你的三连是我更新最大的动力。有任何问题欢迎评论区交流我们一起进步。下期见
返回列表