学习python基础第一部分前八天知识梳理
第一天/第二天
计算机基础
- 硬件
- 操作系统
    - 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】
& 深浅拷贝都一样,正常逻辑重新开辟一块内存地址,(但是存在小数据的缘故,可以理解为小数据的情况拷贝后的变量指向的是同一块内存地址,没有区别) - 可变类型 【列表,字典,集合】
& 浅拷贝:只对最外层进行拷贝,里面的元素指向的是源地址
& 深拷贝: 深拷贝只有在嵌套存在可变类型的情况才有意义,从最外层开始逐层对可变类型进行拷贝重新分配内存地址,直到里面为不可变类型的元素位置,不可变类型的元素还是指向源地址。 
 - 不可变类型 【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) 
基础部分整理完成,从第九课开始函数部分
                    更多精彩
		
													
													
													
													
	
		
