内容概要
- 格式化输出
- 运算符
- 编码
- 基本数据类型
- 深浅拷贝、小数据池
1、格式化输出
# %s 占位字符串. 实际上可以占位任何东西(用的最多的)
# %d 占位整数. 只能占位数字
# name = "wusir" # hobby = "打篮球" print("%s喜欢%s" % (name, hobby))
# 如果你的python是3.6以上, 此时可以使用模板字符串
# f"{变量}"
# print(f"{name}喜欢{hobby}") # 模板字符串
2、运算符
01、算数运算
02、比较运算
03、赋值运算
04、逻辑运算
01. and
并且, 左右两端必须同时为真, 最终的结果才能是真, 有一个是假, 结果就是假
2, or
或者, 左右两端有一个是真. 结果就是真. 全都是假, 结果才能是假
3, not
非.不. 非真既假, 非假既真
4. 优先级
如果出现混合逻辑运算. 顺序: () => not => and => or
例如:
print(not 1 > 5 and 4 < 6 or 7 > 8 and 1 < 9 or 5 > 6) True
先算 not: 1 >5:取反,为True
再算 and: True and 4 < 6 :True , 7 > 8 and 1 < 9 :False
最后 or: True or Flase or 5 > 6
结果为:True
5. a or b
如果 a 是0,结果是b
如果 a 是非0,结果就是a
print(1 or 2) # 1 print(0 or 3) # 3 print(1 or 5) # 1 print(0 or 5) # 5
#0就是假,非0就是真
6. a and b
和 or 相反 print(1 and 2) # 2 print(0 and 3) # 0 print(1 and 5) # 5 print(0 and 5) # 0
05、成员运算
例如:
s = "alex特别喜欢太白金星" if "胡辣汤" in s: print("胡辣汤在 s 变量中") else: print("胡辣汤不在 s 变量中") 胡辣汤不在 s 变量中 print("胡辣汤" in s) False print("胡辣汤" not in s) True
3、编码
01. ASCLL码
早期. 计算机是美国发明的. 普及率不高, 一般只是在美国使用. 所以. 最早的编码结构就是按照美国人的习惯来编码的. 对应数字+字母+特殊字符一共也没多少. 所以就形成了最早的编码ASCII码. 直到今天ASCII依然深深的影响着我们.
ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号。
02. GBK国标码
随着计算机的发展. 以及普及率的提高. 流行到欧洲和亚洲. 这时ASCII码就不合适了. 比如: 中文汉字有几万个. 而ASCII最多也就256个位置. 所以ASCII不行了. 怎么办呢? 这时, 不同的国家就提出了不同的编码用来适用于各自的语言环境.比如, 中国的GBK, GB2312, BIG5, ISO-8859-1等等. 这时各个国家都可以使用计算机了.
GBK, 国标码占用2个字节. 对应ASCII码 GBK直接兼容. 因为计算机底层是用英文写的. 你不支持英文肯定不行. 而英文已经使用了ASCII码. 所以GBK要兼容ASCII.
这里GBK国标码. 前面的ASCII码部分. 由于使用两个字节. 所以对于ASCII码而言. 前9位都是0
字母A:0100 0001 # ASCII 字母A:0000 0000 0100 0001 # GBK 国标
03. Unicode 万国码
国标码的弊端: 只能中国用. 日本就垮了. 所以国标码不满足我们的使用. 这时提出了一个万国码Unicode. unicode一开始设计是每个字符两个字节. 设计完了. 发现我大中国汉字依然无法进行编码. 只能进行扩充. 扩充成32位也就是4个字节. 这回够了. 但是. 问题来了. 中国字9万多. 而unicode可以表示40多亿. 根本用不了. 太浪费了. 于是乎, 就提出了新的UTF编码.可变长度编码
UTF-8: 每个字符最少占8位. 每个字符占用的字节数不定.根据文字内容进行具体编码. 比如. 英文. 就一个字节就够了. 汉字占3个字节. 这时即满足了中文. 也满足了节约. 也是目前使用频率最高的一种编码
UTF-16: 每个字符最少占16位.
GBK: 每个字符占2个字节, 16位
# 用的最多的编码就是utf-8
# 1. 英文: 8bit -> 1byte
# 2. 欧洲文字: 16bit -> 2byte
# 3. 中文: 24bit -> 3个字节 中文有9万多个
# python2.x使用的是ascii
# python3.x内存中使用的unicode, 文件存储使用:utf-8
# s = "古力娜扎" # 字符串直接就是unicode # print(s) # # 想要存储到文件中. 必须进行转换 => utf-8 或者GBK
04. 编码与解码
编码之后的数据是bytes类型的数据,还是原来的数据只是经过编码之后表现形式发生了改变而已。
bytes的表现形式:
- 英文 b'alex' 英文的表现形式和字符串没什么两样
- 中文 b'\xe4\xb8\xad' 这是一个汉字的UTF-8的bytes表现形式
# s = "lishichao" # print(s.encode("utf-8")) # 将字符串编码成UTF-8 # print(s.encode("GBK")) # 将字符串编码成GBK #结果: # b'lishichao' # 英文编码之后的结果和源字符串一致 # b'lishichao' s = "李世超" print(s.encode("utf-8")) # 将字符串编码成UTF-8 print(s.encode("GBK")) # 将字符串编码成GBK #结果: # b'\xe6\x9d\x8e\xe4\xb8\x96\xe8\xb6\x85' # 一个中文的UTF-8编码是3个字节 # b'\xc0\xee\xca\xc0\xb3\xac' # 一个GBK的中文编码是2个字节
#使用decode()来进行解码操作,吧bytes类型的数据还原回我们熟悉的字符串:
print(b'\xe6\x9d\x8e\xe4\xb8\x96\xe8\xb6\x85'.decode('UTF-8'))
print(b'\xc0\xee\xca\xc0\xb3\xac'.decode('GBK'))
编码和解码的时候都需要制定编码格式:
s = "我是文字" bs = s.encode("GBK") # 我们这样可以获取到GBK的文字 # 把GBK转换成UTF-8 # 首先先要把GBK转换成unicode. 也就是需要解码 s = bs.decode("GBK") # 解码 # 然后需要进行重新编码成UTF-8 bss = s.encode("UTF-8") # 重新编码 print(bss)
# 用什么编码,就用什么解码。
4、基本数据类型
4.1 python基本数据类型
- int ==> 整数. 主要用来进行数学运算
- str ==> 字符串, 可以保存少量数据并进行相应的操作
- bool==> 判断真假, True, False
- list==> 存储大量数据.用[ ]表示
- tuple=> 元组, 不可以发生改变 用( )表示
- dict==> 字典, 保存键值对, 一样可以保存大量数据
- set==> 集合 保存大量数据. 无序;不可以重复. 其实就是不保存value的dict
4.2 int
整数类型,主要用来数学运算,只有一个方法。
a = 3 # 二进制用11表示 print(a.bit_length()) #计算二进制长度 #结果为:2
4.3 bool
布尔值只有两个:True、Flase 主要用来条件判断。
基本数据类型之间互相转换
bool => int a = True b = False print(int(a)) print(int(b)) # 整数中 0=> False 非0 =>True #所有表示空的东西都是假 print(bool("")) print(bool("a")) print(bool(None)) #None 表示空
4.4 str
把字符连成串. 在python中用', ", ''', """引起来的内容被称为字符串.
01、字符串的索引和切片
索引:
# 索引就是第几个字符, 索引从0开始 # s = "jay" # print(s[1]) #a []表示索引 # print(s[2]) #y # print(s[-1]) #y # print(s[-3]) #j
切片:
# s = "alex昨天看冯提莫直播. 刷了1w个鱼丸" s[4:8] # 默认从左到右切, 顾头不顾尾[start, end) s[-6:-2] s[8:4] #这样取不到值 s[:6] # 从头开始切, 切到6为止 s[:] # 从头到尾 # 带有步长的切片 s = "wusir喜欢和alex一起去探讨课件" print(s[3:8:2]) # 从3到8 每2个出来1个 i喜和 print(s[::2]) # 从头到尾 步长为2 # 如果步长为负数, 从右到左 print(s[::-1]) print(s[-1:-6:-2]) print(s[-3::-3])
02. 字符串相关操作:
切记, 字符串是不可变的对象, 所以任何操作对原字符串是不会有任何影响的
- 大小写转换:
1. 首字母大写
# s = "alex" # s1 = s.capitalize() # 首字母大写, 字符串是不可变的数据类型. 每次操作都会返回新字符串 # print(s) # print(s1)