is 和 == 区别 id()函数

一. 回顾上周所有内容
一. python基础
1. Python是一门解释型. 弱类型语言
2. print("内容", "内容", end="\n") 打印语句
3. 变量: 程序运行过程中产生的中间值. 存储在内存中.供后面的程序调用
4. 变量的数据类型:
int, 整数
str, 字符串
bool, True,False
5. 命名规则:
1. 由数字,字母,下划线组成
2. 不能是纯数字或者数字开头
3. 不能是关键字
4. 不能太长
5. 要有意义
6. 不要用中文
7. 区分大小写
8. 推荐使用驼峰和下划线命名
6. input() 用户输入
7. if 判断
if 条件:
代码块
else:
代码块

if 条件:
代码块
elif 条件2:
代码块
..
else:
二. while循环
while 条件:
循环体
else:
代码块
流程:
判断条件是否为真. 如果真.执行循环体. 再次判断条件是否真. ....直到条件为假. 执行else. 退出循环

break 直接打断循环.
continue 停止当前本次循环. 继续执行下一次循环

格式化输出:
%s 字符串
%d 数字

运算符:
逻辑运算
1. and. 两端同时为真. 结果才是真.
2. or 或者. 两端有一个是真. 结果就是真
3. not 取反.

() => not => and => or
x or y
如果x非零, x, 否则 y

编码:
1. ASCII. 8bit, 1byte
2. GBK, 16bit, 2byte
3. unicode, 32bit,4byte
4. UTF-8, 英文:8bit, 1byte, 欧洲: 16bit, 2byte, 中文: 24bit, 3byte

3. 基本数据类型
1. int 数字. bit_length() 二进制长度
3. bool 空:False, 非空:True
2. str, 字符串不可变
索引切片: 由0开始
[起始位置: 结束位置: 步长]
操作:
1. upper() 变成大写
2. strip() 去掉空格(两端)
3. replace() 替换
4. split() 切割
5. startswith() 以xxx开头(判断)
6. find() 找xxx字符串在原字符串中出现的索引位置. 找不到返回-1
7. count() 数数
8. format() 格式化输出
9. len() 求长度
4. 列表:
由[]表示
有索引和切片
常用操作:
增加:append(), insert(), extend()
删除:pop() remove() del, clear()
修改:索引切片修改
查询:
for 变量 in 可迭代对象:
循环体
else:

操作:
sort(reverse=True) 排序
reverse() 翻转
len() 长度
count() 数数

元组:
tuple, 只读列表, 由()组成. 不可变的
索引和切片. for循环


解构, 解包
a, b = 1, 2

range(10) 0-9
range(5, 10) 5-9
range(5,10,3) 5,8

5. dict 字典
由{}表示. 存储key:value 键值对. 根据key来计算hash值.找到对应的内存地址.
key必须是可hash的. 不可变的. int, str, 元组, bool

操作:
增加: dict[key] = value
setdefault(key, value)
删除: pop(key), del , popitems(), clear()
修改: dict[key] = value
查询:dict[key], get(key, 默认值),
setdefault() 先执行新增那个流程. 然后.获取到key对应的值

常规操作:
keys() 获取所有的key.返回的像个列表
values() 获取所有value
items() 获取所有的key,value.装成元组. 返回列表[(key,value), (key,value)]

通过items()获取的是k,v
for k,v in dict.items():

直接循环遍历. 拿到的是key
for k in dict:

二. 作业
三. 今日主要内容
1. is 和 == 区别
id()函数
== 判断两边的值
is 判断内存地址

s = "alex 是 大 xx"
abc = id(s)   # 得到内存地址
print(abc)

lst = ["大阳哥", "佳琪哥", "小花生", "燃哥"]
print(id(lst))  # 就是一个内存地址. 毫无意义


lst = ["周杰伦", "燃哥"]
lst1 = ["周杰伦", "燃哥"]
print(id(lst))
print(id(lst1))

s = "燃哥"
s1 = "燃哥"
# 小数据池. 会对字符串进行缓存, 为了节省内存
print(id(s))
print(id(s1))

tu = ("燃哥", "周杰伦")
tu1 = ("燃哥", "周杰伦")
print(id(tu), id(tu1))

dic = {"a": "b", "c":"d"}
dic1 = {"a": "b", "c":"d"}
print(id(dic), id(dic1))

a = 10
b = 10
print(id(a), id(b))

布尔也有,
a = True
b = True
print(id(a), id(b))

-5
a = 257
b = 257
print(id(a), id(b))

a = "小威"
b = "小威"
print(id(a), id(b))

1. id() 查看内存地址
2. str 有小数据池的

== is id
== 判断. 左右两端是否相等和一致, 比较的是内容
is 判断. 判断的是内存地址  id()的值来判断    内存地址

lst = ["马化腾", "小威"]
lst2 = ["马化腾", "小威"]
print(lst == lst2)  # True
print(lst is lst2)  # False


s = "alex"
print("1111111111")
print("1111111111")
print("1111111111")
print("1111111111")
print("1111111111")
print("1111111111")
print("1111111111")
print("1111111111")
print("1111111111")

s2 = "alex"
print(s == s2) # True
print(s is s2)  # True. 小数据池

  


回顾编码:
1. ASCII: 英文, 特殊字符, 数字, 8bit, 1byte
2. GBK: 中文 16bit, 2byte. 兼容ASCII
3. unicode: 万国码, 32bit 4byte. 兼容ASCII
4. UTF-8: 长度可变的unicode. 英文:8bit, 欧洲:16bit, 中文:24bit 3byte

python2 只能用ASCII
python3 有unicode, 默认的编码就是unicode
内存里用的是unicode. 硬盘和网络传输用的是utf-8或者GBK

 

2. encode() 编码. 获取到的是编码之后的结果. bytes
3. decode() 解码. 把bytes编程我们熟悉的字符串

s = "alex马"
想要存储.必须进行编码

encode() 编码之后的内容是bytes类型的数据

30个字节 10个字. 每个字3个字节
b'\xe6\x9d\x8e\xe5\x98\x89\xe8\xaf\x9a\xe7\x9a\x84\xe5\x84\xbf\xe5\xad\x90\xe8\xa2\xab\xe7\xbb\x91\xe6\x9e\xb6\xe4\xba\x86'
bs = s.encode("UTF-8")   # 把字符串编码成UTF-8的形式
print(bs)

英文:编码之后的结果是英文本身
中文:编码之后UTF-8 下. 一个中文3个字节


s = "饿了么"
bs = s.encode("GBK")    # b'\xb6\xf6\xc1\xcb\xc3\xb4' GBK 一个中文:2个字节
print(bs)

s = "中"
print(s.encode("utf-8"))
print(s.encode("GBK"))

decode()解码

bs = b'\xb6\xf6\xc1\xcb\xc3\xb4'    # 从别人那里读到的   GBK

# 编程人认识的东西
s = bs.decode("GBK")    # 解码之后是字符串, 用什么编码就用什么解码
print(s)

GBK => utf-8
bs = b'\xb6\xf6\xc1\xcb\xc3\xb4'
# 先解码成unicode字符串
s = bs.decode("GBK")
# 在把字符串编码成UTF-8
bss = s.encode("UTF-8")
print(bss)

  

posted on 2018-07-09 16:22  你们都厉害  阅读(232)  评论(0编辑  收藏  举报