Python基础

69 阅读9分钟

本文已参加「新人创作礼」活动,一起开启掘金创作之路

Python

  1. 基本语法
    1. 保留字
    2. 行与缩进
    3. 注释
      • 单行注释 #
      • 块注释 ```"""
    4. 输出 print()
    5. 输入input()
  2. 数据类型
    1. 数据类型
      1. Number 数值
        • 整型
        • 复数
        • 浮点类型
        • 布尔类型
        • 常用方法
          • sum sum({1,2,3,4})--> 10
          • divmod divmod(10,3)-->(3,1)
          • round round(3.7)-->4 round(4.5)-->4
      2. String 字符串
        • '''适合多行数据
        • 常用方法
          1. len() 获取字符串长度
          2. 重复输出字符串print("a2的输入结果",a2)
          3. 通过索引获取字符串中的字符print('a[1]的输出结果',a[1])
          4. 字符串截取(左闭右开)print(a[0:4])->Hell
          5. in/ont in 判断一个字符串中是否包含指定的字符串
          6. [:]取片操作-->同下List列表取片操作
          7. r'字符串' 防止字符串转义
          8. capitalize()首字母大写
          9. upper()将英文字符大写
          10. lower()将英文字符小写
          11. swapcase()大小写互换
          12. title() 每个单词首字母大写
          13. count() 计算一个字符串出现的次数
          14. find(查找的字符串,开始的索引默认0) 查找不到返回-1
          15. index(查找的字符串,开始索引位置),查找不到报错
          16. startwith(查找的字符串,开始的索引) 判断字符串是否以指定字符串开头
          17. endwith(查找的字符串,开始的索引) 判断字符串是否以指定的字符串结尾 更多查看
          18. split(分隔符,最大分隔数),分割 s="你好,我是xx,我今年x岁,我上x年级" print(s.split(',',1))-->['你好', '我是xx,我今年x岁,我上x年级']
          19. splitlines() 以换行符分割s="你好,我是xx,\n我今年x岁,\n我上x年级\n" print(s.splitlines())-->['你好,我是xx,', '我今年x岁,', '我上x年级']
          20. join(序列) 将序列中的元素以字符串相连 s2="-" list_l=["ceshi","ceshi2","ceshi3","ceshi4"] s2=s2.join(list_l) print(s2) --> ceshi-ceshi2-ceshi3-ceshi4
          21. zfill(数字) 将字符串用0填充到指定位数s="1.22222" print(s.zfill(10))-->0001.22222
          22. center(总长度,填充字符)居中填充 ljust/rjust s1="ceshi" print(s1.center(10,'*'))-->**ceshi***
          23. strip() 去除左右空白
          24. replace(要替换的字符,替换的字符)
          25. maketrans,translate 创建映射表替换
            # 要替换的字符串
            s='12345'
            # 替换成的字符串
            s1='qwert'
            # 删除的字符串
            s2="test"
            # 创建映射表
            trantab1= str.maketrans(s,s1,s2)
            test="test123456789"
            print(test.translate(trantab1))
            
          26. format
            # 填充
            print( '{:>8}'.format('111'))
            # 精度
            print('{:.2f}'.format(12.119111111111111111111))
            
            # 进制转换 b,d,o,x,二进制,十进制,八进制,十六进制
            print('{:b}'.format(10))
            # 千位分隔符
            print('{:,}'.format(21312312312312321))
            
      3. List 列表
        • 变量=["","",""]
        • 常用方法
          1. 查看列表类型type()
          2. 通过索引取出列表元素
          3. 使用加号连接列表
          4. 对元素进行循环for i in list1: print(i)
          5. 获取列表长度 len(list1)
          6. 检查列表是否存在某元素print('a' in list1)
          7. 删除列表 del list1
          8. 删除列表中某个元素del list1[0]
          9. 返回列表中的最大最小值max(list1)/min(list1)
          10. [:]取片操作
            list1=[1,2,3,4,5,6,7,8]
            # 从1到7 步长2
            print(list1[1:7:2])
            # 从0到9 步长2
            print(list1[:9:2])
            # 从3到结束步长2
            print(list1[3::2])
            #从0到1 逆序 步长1
            print(list1[1::-1])
            
          11. append(obj) 在列表末尾追加
          12. count(obj) 统计元素在列表中出现的次数
          13. extend(list2) 追加一个列表
          14. index(obj) 查找某个元素的索引
          15. insert(index,obj) 在某个位置插入元素
          16. pop(index)根据索引删除 默认为最后一个
          17. remove(obj) 根据对象删除
          18. reverse() 反向列表元素 使用步长-1生成新列表 使用反向还是当前列表
          19. sort(key=None,reverse=false)排序
          20. clear()清空
          21. copy()复制
      4. tuple 元组(数据不可更改)
        • 变量=("","","")
        • 变量="","",""
      5. Dictionary 字典
        • 变量={键:值,键:值,键:值}
        • 遍历字典的 键
          dict1={'1':1,'2':2,'3':3}
          for x in dict1:
              print(x)
          
        • 遍历字典的键值
          dict4=dict([('1',1),('2',2),(3,3)])
          for x,y in dict4.items():
              print('{0}:{1}'.format(x,y))
          
        • items()获取字典的键值对组成元组的格式使用list()转化成由元组组成的列表
        • keys()返回字典的键 dict_keys 可以使用list()转化成列表
        • values() 返回字典的值dict_values
        • get(键,默认值) 通过键获取值
        • pop()根据键删除元素 返回删除元素的值
        • copy() 赋值一个字典
        • setdefault(key,default) 获取字典如不在添加
        • fromkeys(序列,值) 使用指定的序列作为键,使用一个值作为所有键的值
        • update()更新字典 没有就添加
      6. Set 集合
        • 变量={值,值,值}
        • 带元组的集合遍历
          tuple1=11,12,13
          tuple2=12,13,14
          set1={tuple1,tuple2}
          print(set1)
          for x,y,z in set1:
              print(x,y,z)
          
        • 添加 add()
        • 删除 remove(obj)删除的值不在就报错 discard(obj)删除的值不在不进行任何操作 pop()随机移除一个数
        • 交集(俩都有) intersection(集合2) 产生一个新的集合差集(一个有一个没有的) difference(集合2)产生一个新的集合 并集(合一块) union(集合2) issubset() 判断1是否是2的子集 issuperset 判断1是不是2的超集 difference_update()把1和2的不同赋予1 intersection_update() 计算交集赋值 update() 计算并集赋值
        • 冰冻集合/固定集合 frozenset 不可修改值
    2. 数据信息查看
      • 内存标识: id()
      • 类型检测: type()
    3. 类型转换
      1. 自动类型转换
      2. 强制类型转换
        • int()
        • float()
        • complex()生成一个复数
        • bool()
          • 转化为false的情况
            1. 空字符串
            2. 0
            3. 0.0
            4. 复数0+0j
            5. false
            6. 空列表
            7. 空元组
            8. 空字典
            9. 空集合
        • str()
          • [1,2,3]->"[1,2,3]"
        • list()
          • 四种可转化(必须是iterable数据)
            1. str
            2. 集合
            3. 元组
            4. 字典
        • tuple()
          • 四种可转化(必须是iterable数据)
            1. str
            2. set
            3. list
            4. dict
        • dict()
          • 三种可转化
            1. list {('aa','AA'),('bb','BB'),('cc','CC')}
            2. tuple[('aa','AA'),('bb','BB'),('cc','CC')]
            3. set(('aa','AA'),('bb','BB'),('cc','CC'))
        • set()
          • 四种可转化
            1. str
            2. tuple
            3. list
            4. dict
    4. 表达式和运算符
      1. 运算分类
        1. 算术运算
        2. 比较运算/关系运算
        3. 赋值运算
        4. 逻辑运算
        5. 位运算
        6. 成员运算
        7. 身份运算
      2. 算数运算 (没有++,--)
        1. +
        2. /
        3. %
        4. 取商运算 //
        5. 幂运算 **
      3. 比较运算符
        1. ==
        2. !=
        3. <
        4. =

        5. <=
      4. 赋值运算
        1. =
        2. +=
        3. -=
        4. *=
        5. /=
        6. %=
        7. //=
        8. **=
      5. 逻辑运算
        1. and
        2. or
        3. not
      6. 位运算
      7. 成员运算
        1. in
        2. not in
      8. 身份运算
        1. is 检测值是不是和值2在内存中是否是同一个值
        2. not is
      9. 检测数据归属
        1. type()
        2. isinstance(变量,数据类型)检测一个数据是否按指定类型创建
  3. 分支结构
    • if语句(没有switch case)
    • 格式
      i=9
      if i>0:
          if i>8:
              print('i>8')
          elif i>6:
              print('i>6')
          else:
              print('i<6')
      else:
          print('i<0')
      
  4. 循环结构
    • while循环
      • demo
        time=0
        while time<30:
            time+=1
            if time==15:
                print('打游戏')
                continue
            print('学习使我快乐,时间',time)
            
        
    • for循环 range(start, stop[, step])
      set={'11','13412312','55','88',88,88}
      for i in set:
          print(i)
      list=['aa','bb','cc','dd']
      for j in list:
          print(j)
      for i in range(0,100,2):
          if i==0:
              continue
          print(i)
      
  5. 值传递、浅拷贝、深拷贝
    1. 值传递
      • 列表id不变
      • 列表内各元素id不变
      • 修改后 列表id 列表内元素id依旧相等
      • 源代码
        list1=["test",30,['c++','java','python']]
        list2=list1
        print(list1)
        print( id(list1))
        print([id(x) for x in list1])
        print("-------------------------------")
        print(list2)
        print(id(list2))
        print([id(x) for x in list2])
        print('修改后'.center(20,'-'))
        list1[0]='测试'
        list1[1]=30000000000
        list1[2][2]='c#'
        print(list1)
        print( id(list1))
        print([id(x) for x in list1])
        print("-------------------------------")
        print(list2)
        print(id(list2))
        print([id(x) for x in list2])
        
    2. 浅拷贝(列表id不等,元素id相等)
      • 列表id不等,元素各id相等
      • 修改后 int/str id变化不会跟随内容不同 list id相等->内容会跟随变动
    3. 深拷贝(列表id不等 元素id不等)
      • 列表id不等,元素各id不相等(int/str指向同一个id相等)
      • 修改后 int/str id变化不会跟随内容不同 list id不相等->内容不会跟随变动
  6. 函数
    1. 函数特征
      • def 函数名(形参=默认值)
    2. 函数返回值
      • return
    3. help(函数名)/函数名.doc --> 查看函数帮助文档 方法内添加文档注释
    4. lambda表达式-->简介格式的函数,不是一种函数结构,只是一种表达式, 只是不需要函数名(匿名函数)
      g=lambda x:x+1
      print(g(3))
      list_a=[lambda x:x+1,lambda y:y+2]
      print(list_a[0])
      i=list_a[0]
      i(5)
      print(list_a[0])
      
    5. 收集参数
      • 元组 -->def test(a,*b)
      • 字典 -->def test(a,**b)
    6. 变量作用域
      • 局部变量 使用global 将局部变量
      • 全局变量
      • 内部函数:在函数内部声明的函数
      • 闭包: 将函数的局部变量或者内部函数弄到函数外并且可以正常使用的特殊方法,突破了局部作用域的限制
    7. 递归函数
      def factorial(n):
          if(n==1):
              return 1
          return n*factorial(n-1)
      print(factorial(10))
      
  7. 文件操作
    1. open(file文件路径,mode文件打开模式,buffering设置缓存,编码格式encoding,报错级别erros,区分换行符newline,传入的file参数closefd)
      • modet->文本模式 x-> 写入模式 b->二进制模式 +->文件更新(可读可写) r->只读指针在文件开头rb->以二进制只读 用于图片指针在开头 r+->读写 rb+->读写图片 w->从开头覆盖写入,文件不存在创建 wb->图片二进制覆盖写入 w+->文件覆盖写入 a->文件追加,没有就创建 ab->二进制文件追加 a+读写追加 ab+->二进制追加
    2. 编码 [bytes]encode [str]decode
    3. os模块
      import os
      os.chdir('d:/')
      file=open('dcnc.bat');
      print(file.read())
      file=open('dcnc.bat',mode='a+');
      file.write('ceshi')
      file=open('dcnc.bat',mode='r');
      print(file.read())
      
  8. 迭代器
    from collections.abc import Iterable
    print(isinstance('test',Iterable))
    strItr=iter('test')
    print(next(strItr))
    list1 =["1","2",3,4,5]
    listItr=iter(list1)
    print(next(listItr))
    
  9. 生成器
    list_1=[x*x for x in range(100000)]
    # print(list_1)
    list_2=(x*x for x in range(3))
    print(list_2)
    # print(next(list_2))
    # print(next(list_2))
    # print(next(list_2))
    # for x in list_2:
        # print(x)
    def print_a(max):
        i=0
        while(i<max):
            i+=1
            yield i
    a=print_a(10)
    print(a)
    print(type(a))
    print(next(a))
    print(a.__next__())
    def print_b(max):
        i=0
        while i<max:
            i=i+1
            args=yield i
            print('测试'+args)
    b=print_b(100)
    print(b.__next__())
    print(b.send('cxe'))
    
  10. time与calendar模块
    import time
    import calendar
    # 时间戳
    print(time.time())
    # 本地时间
    print(time.localtime())
    # 格式化时间
    print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()))
    
    #2020的日历 
    print(calendar.calendar(theyear=2020))
    # 2019年11月的日历
    print(calendar.month(theyear=2019,themonth=11))
    # 2019年11月天数
    print(calendar.monthlen(2019,11))
    # 2019年11月周二的天数
    print(calendar.weekday(2019,11,2))
    
  11. excel应用
    import xlrd
    '''
    excel数据输出
    '''
    workbook=xlrd.open_workbook('d:/students.xlsx')
    sheet1=workbook.sheets()[0]
    yunwenlist=[]
    shuxuelist=[]
    yingyulist=[]
    for value in sheet1.col_values(1):
        if type(value)==float:
            yunwenlist.append(value)
    for value in sheet1.col_values(2):
        if type(value)==float:
            shuxuelist.append(value)
    for value in sheet1.col_values(3):
        if type(value)==float:
            yingyulist.append(value)
    def sumList(list_):
        listSum=0
        for i in range(len(list_)):
            listSum+=list_[i]
        return round(listSum/len(list_),2)
    print('语文平均分:',sumList(yunwenlist))
    print('数学平均分:',sumList(shuxuelist))
    print('英语平均分:',sumList(yingyulist))
    
    
    import xlsxwriter
    import datetime
    '''
    数据写入
    '''
    workbook = xlsxwriter.Workbook('d:/students.xlsx')
    sheet1 = workbook.add_worksheet('test_sheet')
    workfomat = workbook.add_format()
    # 字体加粗
    workfomat.set_bold(True)
    # 单元格边框宽度
    workfomat.set_border(1)
    # 对齐方式
    workfomat.set_align('left')
    # 格式化数据格式为小数点后两位
    workfomat.set_num_format('0.00')
    heads = ['', '语文', '数学', '英语']
    datas = [['小明', 76, 85, 95],['小红', 85, 58, 92],['小王', 98, 96, 91]]
    sheet1.write_row('A1', heads, workfomat)
    sheet1.write_row('A2', datas[0], workfomat)
    sheet1.write_row('A3', datas[1], workfomat)
    sheet1.write_row('A4', datas[2], workfomat)
    fomat1 = workbook.add_format({'num_format': 'yyyy/mm/dd/ hh:mm:ss'})
    sheet1.write_datetime('E5', datetime.datetime(2019, 11, 9, 22, 44, 26), fomat1)
    # sheet1.insert_image('I6', 'wx.jpg')
    chart = workbook.add_chart({'type': 'column'})
    chart.add_series({'values': '=test_sheet!$B$2:$B$4'})
    chart.add_series({'values': '=test_sheet!$C$2:$C$4'})
    chart.add_series({'values': '=test_sheet!$D$2:$D$4'})
    sheet1.insert_chart('A7', chart)
    workbook.close()
    
  12. 面向对象
    1. 类相关函数
      1. issubclass(子类,需要检测的类的元组) 检测一个类是否另一个类的子类
      2. isinstance(对象,需要检测的类的元组) 检测一个对象是否另一个类的实例
      3. hasattr(对象,成员名)检测某个成员是否在类中
      4. getattr(对象,成员名,[默认值]) 获取某个对象的成员值 相当于对象.成员
      5. setattr(对象,成员名,[默认值])设置或添加成员值 相当于对象.成员
      6. delattr(对象,成员) 删除成员
      7. dir(对象) 获取所有成员