计算机基础
- 硬件
- 操作系统
- 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) 以字典方式传参格式化字符串
-
补充:
- 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)
基础部分整理完成,从第九课开始函数部分