零基础学习python第六课笔记

可变与不可变

可变

# 原id地址不会被改变:不管值如何变化,它的id地址还是原来的id地址不会被改变。
list
a = ['1']
print(id(a))
a.append('b')
print(id(a))
2478325125640
2478325125640#值改变,地址不会改变

set
a = {'a'}
print(id(a))
a.add('b')
print(id(a))
2358866312776
2358866312776 #值变,地址不变

dict
a = {'a':1}
print(id(a))
a.setdefault('b', 1)
print(id(a))
1945361517128
1945361517128 #值变,地址不变

不可变

# 不能直接被改变,如果需要改变只能进行重新赋值,但重新赋值之后id地址将会改变。
int
a = 1
print(id(a))                   
a = 2
print(id(a))
140712754969664#原id地址
140712754969696# 重新赋值后的id地址

str
a = '1'
print(id(a))
print(a.replace('1', '1234'))
2379913191344#原id地址
2379914247344# 使用replace重新赋值修改后的id地址

tuple # 和上述同理

字符串转义

字符前存在(反斜杠),在特定情况下字符就不再表示本身的意思
字符串前加r防止被转义

\n 换行符             \t 水平制表符       \b退格符,往前删除一格#空格位置有数据会被删除
print('a\nb')         print('a\tb')         print('a\bc')
a                     a b                   c
b

\r右边位置移到开头#如果存在多个\r只取结尾的,其余的会被删除。
print('a\rb\rc\rd\re')
e

\\ #防止路径被转义
print('\\')
\

\" 一个双引号
print('\"')
"

\0  一个空格符  #pycharm里运行没有效果,只能在python命令控制台里才有效果

\a 系统提示音  #pycharm里也没有效果,只能在python命令控制台里有效果



编码与解码

编码格式 utf8  gbk
encode编码
remove_1 = '士大夫'                             
print(remove_1.encode('utf8'))
b'\xe5\xa3\xab\xe5\xa4\xa7\xe5\xa4\xab'

decode解码
remove_1 = '士大夫'
print(remove_1.encode('utf8'))
insert_1 = remove_1.encode('utf8') #这里要用变量名接受才能解码。
print(insert_1.decode('utf8'))
b'\xe5\xa3\xab\xe5\xa4\xa7\xe5\xa4\xab'
士大夫

格式化补充

%s (占位符)%r(显示原数据类型)区别
print('%s' % '爱')   print('%r' % '爱')'爱'    #它会将字符连带着一起打印出来

%d 整数  

%f 浮点数 #默认保留六位小数

%c ASCII表
print('%c' % 520) #有专门的ASCII表找到对应的ASCII码加密可能会用到
Ȉ

%o 八进制

%d 十进制

%x 十六进制

左对齐 -
print('%-6.3f' % 6) #这里6是指长度的意思,3是指要保留多少位小,它会优先满足小数点后几位
6.000 

+显示正号d
print('%+6.3f' % 6) #用法和-一样,只是不会对齐但会显示正+符号
+6.000

len 查看长度
a = '1234'   len不能查看int类型的长度,需转类型。
print(len(a))
4

格式化长度 #通过占位符%s严格控制长度,注意-是从右往左。
print('%6s' % 'a') 这里6表示要控制的长度,它不会计算原有的字符串长度,只会控制添加的字符串长度
     

format扩展

# {:.}.format()用法 
a1 = '{:.2f}'.format(1.234)  #:(冒号)表示指定数据类型, .(点)后面+数字表示你要保留多少位小数,这里f是你要表示的数据类型,format()括号里添加你的数值
print(a1)
1.23

# {:.}.format(a = 1,b = 2)指定传入
b1 = '{c1:.2f}'.format(c1 = 2.431)# 这里c1表示用变量名来代替了数值,和b1 ='{}{}{}'.format(y=1, y1=2, y2=3)是一样的。
print(b1)
2.43

# 百分比格式化
c1 = '{:.1%}'.format(0.442)
print(c1)
44.2%

# 八进制
a4 = '{:o}'.format(30)
print(a4)
36

# 十六进制
a5 = '{:x}'.format(30)
print(a5)
1e

# 左对齐 <小于符号   数据长度不足时可以用其它符号或者数字来代替
b2 = '{a:<11}'.format(a = 1, b = 2)
print(b2)
b2 = '{a:x<11}'.format(a = 1, b = 2)
print(b2)
1          
1xxxxxxxxxx

# 右对齐 >大于符号  和左对齐同等用法
c1 = '{a:>11}'.format(a = 1, b = 2)
print(c1)
c1 = '{a:x>11}'.format(a = 1, b = 2)
print(c1)
          1
xxxxxxxxxx1

# 两边对齐 ^ 和左对齐、右对齐同等用法
d1 = '{a:^9}'.format(a = 1, b = 2)
print(d1)
d1 = '{a:x^9}'.format(a = 1, b = 2)
print(d1)
    1    
xxxx1xxxx

进制转化

# 十进制转二进制bin()
print(bin(3344))
0b110100010000    前面的0b是声明它是二进制

# 十进制转八进制oct()
print(oct(100))
0o144             同上,0o是声明它是八进制

# 十进制转十六进制 hex()
print(hex(200))
0xc8              同上,0x是声明它是十六进制

# 其它进制转十进制int('这里填进制数据',这里写进制类型),灵活运用可以达到进制与进制之间的转换效果。
print(int('111110', 2))   print(hex(int('100', 8)))#这里是八进制转十六进制
62                        0x40

chr 将ASCII码值转换成字符。
print(cha(520))
Ȉ

深浅拷贝

1.浅拷贝

外层不会受影响,内层会受影响。

原来的列表改变,复制的列表同样会改变

a1 = [1, 2, 3, 'a']-----#a1原地址1916558015816
a2 = ['b', a1]---------#a2[1]原地址1916558015816
a3 = a2.copy()--------#a3[1]原地址1916558015816
a1.append('c')
a1
[1, 2, 3, 'a', 'c']
a2
['b', [1, 2, 3, 'a', 'c']]----#这里是嵌套
a3
['b', [1, 2, 3, 'a', 'c']]----#这里是copy
id(a2[1])
1916558015816
id(a1)
1916558015816----------#嵌套内的id地址不会改变
id(a3[1])
1916558015816

2.深拷贝

需要导包import copy deepcopy

内外层都不影响

import copy
b1 = [1, 2, 'a']
b2 = ['b', b1]
b3 = copy.deepcopy(b2)
id(b1)
1916559091336
id(b2[1])
1916559091336
id(b3[1])
1916559091720 #copy.deepcopy深复制过来的数据内外层id地址都不相同,不受原数据影响。

id(b2)
1916559215304
id(b3)
1916559210440
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值