python基础7

互联网 2022/5/22 9:04:35

基础数据类型方法补充strstr.capitalize():首字母大写 str.swapcase():大小写颠倒 str.title():单词首字母大写 str.center(length,sub):按照特定长度居中,并且两端用特定字符填充 str.find(sub):从左到右,找到第一个匹配字符,返回index,找不到就返回-1 str.index(sub…

基础数据类型方法补充

  • str

    • str.capitalize():首字母大写
    • str.swapcase():大小写颠倒
    • str.title():单词首字母大写
    • str.center(length,sub):按照特定长度居中,并且两端用特定字符填充
    • str.find(sub):从左到右,找到第一个匹配字符,返回index,找不到就返回-1
    • str.index(sub):同find差不多,只是它找不到时,报错
    • str.count(sub):计算字符出现的次数
  • tuple

    • 当元组内只有一个元素时,改元素后必须跟逗号,否则改数据不是元组
    • tuple补充方法
      • index同str的index相同
      • count
  • list

    • 在循环列表时,不建议改变列表的大小,因为改变列表的大小会导致数据的挪动,改变元素的索引,导致操作出错或报错

    • list.index():根据元素返回index,找不到就报错

      • l1 = [1,2,3]
        l1.index(1) # 0
        
    • list.count()

    • list.sort():给列表排序(一般是给全数字元素的;列表排序),参数reverse:默认从小排到大,为True时,从大到小

    • list.reversed():翻转列表

    • 列表能相加,【合并两个列表,生成一个新的列表】

      • l1 = [1,2,]
        l1 += [3,4]
        print(l1) # [1,2,3,4]
        
    • 列表能乘数字【使列表内的元素,复制n份】

      • l = [1,2,'蔡学明',[1,2,3]]*2
        print(l)
        print(l[3] is l[-1])
        
      • 记得是复制哦

  • dict

    • 字典在循环时,不能改变字典大小

    • 解决方法:将要改变的键值对的key保留出来,在循环结束时,再逐一改变

      • dic = {'k1':'太白','k2':'barry','k3': '白白', 'age': 18}
        # 请将字典中所有键带k元素的键值对删除。
        # 方法1
        key_list = []
        for i in dic:
            if 'k' in i:
                key_list.append(i)
        for i in key_list:
            dic.pop(i)
        print(dic)
        
        # 方法二
        for key in list(dic.keys()):
        	if 'k' in key:
        		dic.pop(key)
        

数据类型间的转换问题(想转成什么,就用对应的函数包裹)

  • int <--> str

    • 要注意,字符串要想转成int,字符串内的所有元素必须都得是数字字符

      i = 100
      s = str(i)
      s1 = '123'
      i1 = int(s1)
      
  • int <-->bool

    • 非零即为True,零为False

      i = 0
      print(bool(i)) # False
      
  • bool <--> str

    • 非空字符串就为True,bool转为str毫无意义,就只是多了两个单词

      print(bool(' ')) # True
      
  • str <-->list

    • 一般采用join和split方法【join方法要注意可迭代对象内的元素必须全是字符串】

      s = '1,2,3,4'
      l = s.split(',') # l = ['1','2','3']
      s1 = '+'.join(l) # s1 = '1+2+3'
      
  • list <--> set

    • 一般用于列表去重,不过set是无序的,所有去重后的列表会被打乱

      l = [1,2,3,3]
      l = list(set(l))
      
  • 可以转成False的值

    • {},set(),'',0,None,[],(,)
      

基础数据类型总结

  • 根据数据类型是否可变
    • 可变的:set、list、dict【可变的数据类型的操作方法大多数会直接改变原数据】
    • 不可变的:int、bool、str、tuple【不可变的数据类型的操作方法,大多数会生成一个新的值】
  • 根据数据类型是否有序【就容器数据类型】
    • 有序的:list、str、tuple
    • 无序的:dict【其实dict是有序的,在3.6以上的版本,就是有序的】、set
  • 根据占内存空间的大小【从大到小】
    • dict > list ~= set > tuple>str>int

编码进阶

  • 在内存中,所有的数据都是以Unicode的编码形式存在,但是网络传输和储存时,都不能使用Unicode编码

  • 在应用层时,所有的加载的数据都会解码成Unicode,但存储时,会被编码成各种编码的文件

  • !image

  • 不同编码之间是不能直接识别和转换的,即以Utf-8编码的文件要以Utf-8解码,否则就会乱码,而且utf-8是无法直接转成gbk编码的

  • 在python中有一类特殊的数据类型【byter】:该种数据类型在python程序运行在内存中时,是非Unicode编码的形式存在的。

  • byter是类似的字符串的数据类型,拥有字符串的大部分操作方法

  • 用byter和Unicode作为编码之间互相转换的交换区【主要原因是byter可以从任何形式的编码文件变成Unicode,再从Unicode变成任何编码的byter】

    • 1:将特定编码的文件,用decode方法解码成Unicode
    • 2:将Unicode编码特定的编码文件
    • image
  • 主要使用两个方法

    • 方法一:str.encode('编码方式')

    • 方法二:byter.decode(‘解码方式'')

      • b = b'\xe4\xb8\xad\xe5\x9b\xbd' #一utf-8编码的bytey
        s = b.decode('utf-8') # s = '中国'
        b1 = s.encode('gbk') #b'\xd6\xd0\xb9\xfa'
        
        
    • 注意:解码时,要注意编码是用什么编码的,即编码是什么格式,解码就得是什么格式,否则会出错

文件的操作

  • 文件操作初始

    • 文件操作三个条件
      • 文件路径
      • 文件编码方式
      • 文件打开模式
  • 文件操作三部曲

    • 打开文件

      f = open(路径,encoding=编码方式,mode=打开模式)
      
    • 操作文件

      f.操作方法
      
    • 关闭文件

      f.close()
      
  • 操作详解

    • open是python的内置函数,底层原理是调用操作系统的文件操作接口
    • 路径可以是相对路径,也可以是绝对路径
    • 文件被打开就会一直被加载在内存中,在操作完文件后,必须关闭文件
    • f是文件句柄,是一个变量
  • 文件的打开模式

    • 读模式: r(文本读) 、rb(字节读)

      • f1 = open('路径',encoding='编码方式',mode='r') 
        
      • 默认mode是r,所以如果是mode是r时,可以不写

      • 如果mode是rb时,不用写encoding方法

      • 在该模式下,文件有多种操作方法

        • f1.read(n)【n为读取的字符长度,当模式是rb时就是字节长度,如果不写,就是全读】

          f1.read(n)
          
        • f1.readline()【按行读取文本】

          f1.readline()
          
        • f1.readlinese()【按行读取文本,将每一行读取到一个列表内】

          l =  f1.readlinese()
          
        • for i in f1【以for循环的方式,读取每一行文本,推荐使用,不同一次加载过多文件数据在内存】

          for line in f1:
          	print(line)
          
    • 写模式:w(文本写),wb(字节写)

      • 当mode是wb,不用写编码方式

      • 如果没有该文件就会创建一个新的文件

      • 要注意以w模式下,在打开文件时,第一步就会清空文件内的数据

      • 在w打开的模式下,无论多少次写的操作都不会触发清空,直到以w模式再次打开文件才会

      • 在该模式下只有一种操作方法,往文件内写入数据

        • f1.write()
          
        • f1.writeline() # 其实两者差不多是一种方法,一行写入,和一次性写入,很少使用writeline
          
    • 追加模式:a(文本追加),ab(字节追加)

      • 当mode为ab时,也不用写编码方式
      • 与w模式相同,它也会在文件没有时,创建文件
      • 它也只有写的操作方法,但是它打开文件时,不会清空文件数据
      • 该模式的追加是在文件的尾部追加
    • 其他模式

      • r+:读写模式,不会创建文件,不会清空文件

        • 要注意读写的顺序,必须是先读后写

          with open('文件的其他操作模式',encoding='utf-8',mode='r+') as f1:
              for line in f1:
                  print(line.strip())
              f1.write('\n大傻逼蔡观河')
              f1.writelines('大傻逼')
          
      • w+:写读模式,会创建文件,也会清空文件,所以读写的顺序是,先写将游标跳到最前端后读

        • with open('文件操作的w+操作',encoding='utf-8',mode='w+') as f2:
              f2.write('ashdjasj1')
              f2.seek(0)
              for i in f2:
                  print(i)
              f2.write('你什么')
          
      • a+:追加读写模式,会创建文件,不会清空文件,读写顺序可以随意,但读得先将游标跳到开端

        • with open('文件操作的a+操作',encoding='utf-8',mode='a+') as f2:
              f2.seek(0)
              for i in f2:
                  print(i)
              f2.write('1223')
          
    • 文件操作的其他方法

      • tell():返回文件句柄的游标的所在字节位置
      • seek(n):将游标移动到n的位置,n必须为字节的长度,移动到开头就是seek(0),结尾是seek(0,2)
      • seek的第二个参数表示的是从哪个位置进行偏移,默认是0,表示开头,1表示当前位置,2表示结尾
      • flush():将文件更新的数据写入硬盘内
  • 文件操作的先进方法

    • with方法的优点:

      • 不用自己关闭文件,在代码运行过with语句后,一段时间内关闭文件
    • 能一次性打开多个文件

    • 单一文件操作

      with open(路径,编码方式,打开模式) as 变量:
      
    • 多个文件操作【\表示本行未结束,下一行也是本行的延申】

      with open(路径,编码方式,打开模式) as 变量,\
      	with open(路径,编码方式,打开模式) as 变量:
      
  • 文件的改操作

    • 五部曲【备胎改造计划】

      • 1、 打开要修改的文件
      • 2、打开一个备用文件
      • 3、将要修改的文件数据写入备用文件
      • 4、删除原文件
      • 5、将备用文件更名为原文件
    • 上代码

      with open('男女盆友',encoding='utf-8',mode='r') as f1 ,\
          open('男女盆友备胎',encoding='utf-8',mode='w') as f2:
          for line in f1:
              f2.write(line.replace('alex','sb'))
      import os
      os.remove('男女盆友')
      os.rename('男女盆友备胎','男女盆友')
      

函数

  • 函数的初识

    • 函数的作用
      • 减少重复代码,使代码更简洁、可读
      • 实现代码多次复用
      • 以功能为导向实现代码
  • 函数的结构

    • 函数由关键字、函数名、小括号、函数体组成

    • def 函数名():
      	函数体
      
    • def是定义函数的关键字,以该关键字开头,是告诉解释器,接下来的一段代码是函数

    • 函数名其实也是变量,定义函数名的要求与变量相同,但更要求语义化,让人见名知义

    • 小括号内包裹的是函数内预先定义的变量,也叫形参,命名同变量

    • 函数体内写的是函数实现的功能

  • 函数的返回值【return】

    • 关键字:return
    • return的作用:
      • 作用1:结束函数的执行,函数内的代码执行到该行代码时,就会不会往下执行代码
      • 作用2:返回数据
        • 当没有设置return时,返回值默认是None,写了return但是后面没有跟数据,返回值也是None
        • 返回一个数据时,数据类型就是该数据的类型
        • 返回多个数据时,会将多个数据,包裹成元组的数据类型
  • 函数的调用:在函数名后跟小括号,小括号内添加的数据就是实参

  • 函数的参数

    • 函数的参数分两种:实参、形参
    • 实参是在函数调用时,传入给函数使用的数据
    • 形参是在函数定义时,小括号内的变量
  • 实参的传参方式

    • 位置传参:根据形参的位置和个数传入数据

      • 要求:与形参个数一一对应,顺序不能乱,而且不能多不能少
      • 优点:快捷、方便
      • 缺点:如果不记得传入的顺序,会导致函数执行错误
    • 关键字传参:根据要传入的形参的变量名,一一对应传入参数

      • 要求:也要求一一对应,但顺序没要求
      • 缺点:麻烦
      • 优点:数据顺序可以乱
    • 混合传参:可以将位置传参和关键字传参混合传参

      • 要求:位置参数必须在关键字参数前,不能重复传参
      • 优点:灵活的传入参数
      • 缺点:暂时没有
    • def func(key,key2):
      	pass
      func(value,value) # 位置传参
      func(key=value,key2=value2) #关键字传参
      func(value,key2=value1) #混合传参
      
  • 形参的定义方式

    • 位置形参:能接收位置参数和关键字参数

      • def func(变量,变量1):
        	pass
        func(value,value)
        
    • 默认参数形参:在函数定义形参变量时就赋予默认值,函数调用时可以不传入该参数,如果传入就覆盖该默认值

      • def func(变量=value):
        	pass
        func()
        
    • 万能位置形参:进阶的位置形参,贪婪原则,尽可能的接收位置参数,使函数能接收更多的位置参数

      • def func(*args):
        	pass
        func(value,value1,value2,value3)
        
    • 万能关键字形参:贪婪原则,尽可能的接收关键字参数

      • def func(**kwargs):
        	pass
        func(name=value,age=value,sex=value)
        
    • 仅限关键字形参

      • 位置处于万能位置形参和万能关键字形参之间

      • 只能以关键字传参的方式传入数据

      • def func(*args,变量,**kwargs):
        	pass
        func(变量 = value)
        
  • 关于函数形参定义的顺序

    • 普通位置形参 > 万能位置形参 >默认形参 and 仅限关键字形参 >万能关键字形参

    • def func(a,*args,sex='男',b,**kwargs):
      	pass
      
  • 关于函数传参顺序

    • 位置参数 >关键字参数
  • 关于*的应用

    • 在函数定义时
      • 定义万能位置形参:聚合作用,将接收的位置参数,聚合成一个元组
      • 在定义万能关键字形参:聚合作用,将接收到的关键字参数,聚合成一个以关键字为key,值为value的字典
    • 在函数调用时
      • 一个*,代表打散一个可迭代对象,将一个个元素作为位置参数传入给函数
      • 两个*,代表打散一个字典,将一对对键值作为关键字参数传入给函数

名称空间

  • 什么是名称空间
    • 在py代码开始执行时,创建的以变量与值,函数与函数体的关系的字典,就称为名称空间
  • 名称空间的种类
    • 内置命名空间:存储内置函数的名称空间
    • 全局命名空间:py文件执行时,存储变量名与值、函数名与函数体的关系的名称空间
    • 局部命名空间:函数执行时,内部产生的临时命名空间
  • 名称空间的加载顺序
    • py文件没有执行时,内置函数就存在,所以内置名称空间加载最早
    • py文件执行时,才会定义函数和执行函数,所以全局名称空间在局部之前
    • 内置 > 全局 >局部
  • 名称空间的取值顺序
    • 取值顺序遵从就近原则,单项不可逆原则
    • 就是从当前名称空间开始找,如果当前名称空间有,就用当前的,没有就向上找变量或函数,但是不能往下级名称空间找

作用域

  • 什么是作用域:函数和变量能使用的特定区域就称为作用域
  • 全局和局部作用域:
    • 全局:变量和函数,在py文件的全部的区域都可使用,具体范围包含内置名称空间和全局名称空间的变量和函数
    • 局部:函数名称空间内的变量和函数只能在函数内使用,函数外不能使用
  • 作用域取值和加载顺序:
    • LEGB(就近原则):同名称空间取值原则一致,或者说作用域就是概括性的名称空间
    • 全局包含局部,先加载全局才会产生局部

函数的嵌套(高阶函数)

  • 在函数内定义函数或调用函数就是函数的嵌套
  • 函数内的代码执行是从上到下,直到执行到return或最后的代码,才会跳出函数,如果函数内有其他函数的调用,就得等被调用函数执行完才,继续执行本函数

globals、locals

  • global():返回全局作用域内的名称空间
  • locals():返回当前作用域内的名称空间
随时随地学软件编程-关注百度小程序和微信小程序
关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。
本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。
[python基础7]http://www.zyiz.net/tech/detail-324273.html

赞(0)
关注微信小程序
程序员编程王-随时随地学编程

扫描二维码或查找【程序员编程王】

可以随时随地学编程啦!

技术文章导航 更多>