第一天/第二天

计算机基础

- 硬件
- 操作系统
    - linux (CentOS,Unix,Ubuntu,RedHat)
    - windows 
    - Mac
- 解释器/编译器
- 软件

python环境安装

- python2/3 解释器安装
- pyCharm 开发工具安装/使用

第一行代码 hello word

- python代码首行信息
    - 指定python解释器来执行(针对Linux) #!/usr/bin/env python
    - 指定解释器执编码 # -*- coding:utf-8 -*-
        - python2 编码为 ascii
        - python3 编码为 UTF-8
    - 初识计算机编码
        - ascii 可以表示所有英文字符,用八位来表示一个字节,最长是16位两个字节 2**8 = 256个字符
        - Uncode 万国码,用三十二位来表示,最多可表示2**32个信息,可以表示所有的字符,目前只用到了24位三个字节。
        - UTF-8,Uncode的简化版,用尽可能少的位数表示出字符,中文用三个字节表示。
        - utf-16

输入输出

- 输出
    - python2
        - print "你好"   
    - python3
        - print("你好")   
- 输入 (得到的值为字符串)
    - python2
        - raw_input("")
    - python3
        - input("")

注释

- # 单行注释
- """多行注释"""

变量/常量

- 变量
    - 字母、下划线、数字的任意组合
    - 开头不能是数字   
    - 不能是python内置关键字
- 常量
    - 常量大写以区别变量

基础数据类型

- int
    - 32位机器的整数范围 -2**31 ~ 2**31-1
    - 64位机器的证书范围 -2**63 ~ 2**63-1
- str
    - 换行显示字符用三引号
        示例 msg = """举头望明月,
                      低头思故乡。
                  """
- bool
    -False/True;0/1

流程控制

- if else

while 循环

- break 关键字 跳出当前循环
- continue关键字,结束当次循环,继续下次循环
- while else

字符串格式化

- content = "%s,你现在的船长是%s"%("甚平","路飞")
- content = "我是%s,是要成为海贼王的男人"%"路飞"
- %s,字符串
- %d,数字
- %% 转义成百分号

运算符

- // 取整除 --》返回商的整数部分
- % 取模,-->返回余数
- 逻辑运算
    - 在没有()的情况下,"><" > not > and > or
    - x or y,  if x is false,then y, else x
    - x and y, if x is false,then x,else y
    - not x ,if x is false ,then True, else Flase
    - 逻辑运算特殊情况(数字 0 为False,其他为True,逻辑运算里面是什么就返回什么,不会转换成False/True返回)
        - 1 and 0
        - 0 or 8 
        - not 2 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6

编码补充

- GBK ,一个中文用两个字节表示
- Unicode,万国码,四个字节表示一个字符
- utf-8,用最少位数表示一个字符,Unicode的简化版
- utf-16,最少用16位表示一个字符

第三节/第四节

数据类型

1. 整型 int

  • python2
    • 32位系统,整数范围在 -2**31 ~ 2**31-1
    • 64位系统,整数范围在 -2**63 ~ 2 **63-1
    • 超过后自动转换为长整型long类型。
    • 除法运算只会返回整数位,如果需要返回小数位需引入模块,
      from __future__input division
  • python3
    • 没有长整型long只有int类型

2. bool类型

- 类型转换
    - 数字转bool    (0是假,其他都是真 )
     v1 = bool(3) print(v1) # True; v2 = bool(0),print(v2) #False;
    - 字符串转bool 
      "",空字符串为假,其他为真

3.字符串 str

- 获取长度 len(s)
- 切片[:],[-1:]
- 步长[::2]
    - 面试题:翻转字符串 [-1::-1]
- 索引 s[3]
- 格式化字符串
    - format
        # content = "{0}{1}带着{2}来了".format("美女","剑豪","肉")
        # content = "{a}{b}带着{c}来了".format(a= "美女",b = "剑豪",c= "肉")
  • 字符串操作
    • 大小写转换(upper()/lower())
    • 替换 replace()
    • 切割 split()
    • 去空格/制表符/换行符 strip() 以及指定的字符串
    s="abc"
    s.strip('a') # 只能去头尾,比如b就去除不了
    
    • 以什么开头/结尾 startswith(),endswith()
    • 统计子序列在字符串中出现的次数 count()
    • 判断是否可转换成十进制数字 isdecimal() # "①,一" 这种都是False
    • innumeric()只要是数字相关的都能识别为True
    • 查找子序列的下标 find(),没有返回-1
    • join 以指定字符将序列中的各个元素进行拼接成新的字符串

4.列表 list

- 语法 li = [],li = list()
- 公共功能
    - 索引
    - len()
    - 切片 []
    - 步长
    - del [索引] 不包括(int/str/bool/集合)    
  • 独有功能

    • append() 追加
    • insert() 插入
    • pop(索引) 删除指定索引的元素并将其返回,不传索引默认删除最后一个
    • remove("元素") 只能从左往右删除第一个,如果不存在会报错
    • reverse() 反转
    • sort(reverse=False) 默认False 按升序排序
    • extends(序列),循环处理序列的单个元素,追加进列表 【元组没有这个方法】
    • clear() 清空
    • capitalize() 首字母变大写
    • casefold() 首字母变小写
    • count('子序列') 计算‘子序列’在字符串中出现的次数
    • find("子序列") 返回子序列在该字符串中的索引位置,没找到返回-1
    • format_map(dict) 以字典方式传参格式化字符串
  • 补充:

    SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
    • range方法翻转
    name = "你是霸王"
    name_len = len(name) -1
    value = ""
    for i in range(name_len,-1,-1):
        value += name[i]
    print(value)
    
    • type 函数查看变量属于什么类型

5.元组 tuple

- 语法 tu = tuple(),tu = (1,)
- 元组:不可变类型,与列表类似,没有独有功能

第五节/第六节

数据类型

1.字典

  • 独有功能:
    • keys() 获取字典中的所有键
    • values() 获取字典中的所有值 dict_values(['盗贼', '刺客', '牧师'])
    • items() 获取字典中的所有键值对,返回类似元组 dict_items([('a', '盗贼'), ('b', '刺客'), ('c', '牧师')])
    • get(key,6666) 返回键对应的值,如果没有不会报错返回None,可自定义默认返回值 6666
    • update({dict}) 批量增加,如果存在则覆盖,不存在则新增
    • clear()
    • pop(key) 删除指定键的键值对
  • 嵌套
    • 值:任何东西都可以当值
    • 键:可变/可哈希的类型(列表;字典,集合)不可当键
  • 补充
    • 判断是否有敏感字符
      • in,not in 【str,list,tuple一样操作】
      • dict 字典默认是按照键判断

2.集合

  • 特点:无序,不重复
  • 语法:s={3,52,5,"fdf"} ; s= set()
  • 独有功能
    • add('') 添加,不能重复添加
    • discard('')删除,不能通过索引,因为无序,没有不会报错
    • remove() 如果没有会报错
    • pop() 随机删除
    • update({'a',1,33}) 批量增加 【相同的元素只会出现一次,不重复】
  • 集合中的交集,并集,差集
    • 交集 intersection()
    • 并集 union()
    • 差集 difference() 【a中有b种没有】
    • 示例:
    s1 = {123,11,33,"aaa"}
    s2 = {123,11,33,"bbb"}
    result = s1.difference(s2)
    print(result) # aaa
    
    • 对称差集 symmetric_difference() 【a中有b种没有,b中有a中没有】
    • 注意:方法后面的值可以作用于列表和元组
  • 公共功能
    • len
    • for 循环
  • 集合的嵌套
    • 列表/字典/集合【等可变类型不可嵌套】
    • hash -->哈希是怎么回事?
      & 内部通过哈希算法得到一个数值(内存地址),方便快速查找
    • 特殊情况
      & 集合中同时存在bool类型 True/False和数字1,0时,由于内部哈希算法会将bool类型转换成数字1,0,发现已经存在,只显示前一个。【字典中的键同理】
    • 示例:
    b1 = {33,False,0}
    b2 = {44,1,True}
    print(b1) # {False, 33}
    print(b2) # {1, 44}
    
  • 内存相关
    • 判断:看是给变量重新赋值还是修改内部元素
    • 查看内存地址的内置函数 id(变量)
    • python特殊情况 缓存机制
      & 数字-5~256,为常用数字,不会重新开辟内存
      & 字符串,常用字符串,不会重新开辟内存
      & 特殊字符串 "f_*" * 3 这种会重新开辟内存
  • 问题 is 与 == 的区别?
    • is 比较内存地址是否相等
    • == 比较两个值是否相等

第七节/第八节

1、深浅拷贝

  • 语法
    • 浅拷贝:copy.copy()
    • 深拷贝:copy.deepcopy()
  • 深浅拷贝区别
    • 不可变类型 【str,int,bool】
      & 深浅拷贝都一样,正常逻辑重新开辟一块内存地址,(但是存在小数据的缘故,可以理解为小数据的情况拷贝后的变量指向的是同一块内存地址,没有区别)
    • 可变类型 【列表,字典,集合】
      & 浅拷贝:只对最外层进行拷贝,里面的元素指向的是源地址
      & 深拷贝: 深拷贝只有在嵌套存在可变类型的情况才有意义,从最外层开始逐层对可变类型进行拷贝重新分配内存地址,直到里面为不可变类型的元素位置,不可变类型的元素还是指向源地址。
  • 特殊情况 元组
    • 元组里面元素都为不可变类型时,深浅拷贝都不会重新开辟内存地址
    • 元组存在可变类型时,深拷贝都会重新开辟内存地址

2、文件操作

  • 基本语法
    file_object = open("",mode='',encoding='') # 打开文件 
    file_opject.read()  # 操作文件
    file_object.close() # 关闭文件 
    
  • mode参数
    • r 只读文件,光标默认从文件最开始读,文件不存在会报错
    • w 只写文件,文件不存在会创建,写之前清空文件
    • a 只能追加文件内容,文件不存在也创建,但是不能读取
    • r+ 可读可写,读:默认光标从0开始读,写:从光标位置写入;均可通过seek()方法调整光标位置
    • w+ 可写可读,读:默认光标在最后或者0;写:先清空,在写入;均可通过seek()方法调整光标位置
    • a+ 可读可追加,追加默认在光标在最后,如果读取需要调整光标的位置,只要写,永远是从内容最后开始写入
    • rb,wb,ab,只读只写二进制
    • r+b,w+b,a+b 可读可写二进制
    • open("",mode='wb') # 不写encode参数,即按照二进制方式写入
    • open("",mode="rb"),# 默认用二进制方式读取,用十六进制显示内容
  • 操作文件
    • read() 默认读取整个文件到内存
    • readlines() 读取整个文件到内存中,并按行分割到列表中【返回的是按行分割的列表】。
    • read(n) 从光标处读取n个字符
    • 以下方式读取不是一次性将整个文件读取到内存
    file = open("b.txt",mode='r',encoding='UTF-8')
    li = []
    # content = file.read()
    #按行读取文件内容,
    for i in file:
    print(i.strip())
    li.append(i.strip())
    file.close()
    
    • seek() ,调整光标在文件中的位置,字节为单位
    • tell(), 返回 光标所在的字节位置;用途断点续传
    • flush();强制刷新,将内存上的数据写入硬盘
  • 进制
    • bin 二进制 逢二进一,以0b开头
    • oct 八进制 逢八进一,以0o开头
    • int 十进制 逢十进一,
    • hex 十六进制 逢十六进一 以0x开头,但是10-15用abcde表示,用更好的内容表示更多数据
    • 字符转二进制
    st.encode('UTF-8')
    
    • 二进制转字符
    st.decode('UTF-8')
    
    • 进制转换成十进制
    # 二进制转十进制
    v1 = '0b1101'
    result = int(v1,base=2)
    # 八进制转十进制
    v1 = '0o1101'
    result = int(v1,base=8)
    # 十六进制转十进制
    v1 = '0x1101'
    result = int(v1,base=16)
    

基础部分整理完成,从第九课开始函数部分

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄