python入门到秃顶(3):字符串格式化输出和浅层拷贝
一丶字符串拼接
-
1,字符串直接相加
s = 'hello' a = 'jack' s+a
-
2,jion() 用来拼接
用法:要在join前面+上一个空的字符串
''.join('asd') # 'asd' ' '.join('asd') # 'a s d' 前面的字符串里面有个空格,就 ' '.join(['a','s','d']) # 'a s d' 以空格来拼接字符串 ','.join(('你好','jack')) # '你好,jack'
二丶字符串的格式化
-
1,%s 是一个占位符 掌握%s %r 后面跟上我想要传入的数据 %d传整字 %f浮点数 %cAscall值
'hello %s' % 'jack' 'hello jack' '%s %s %s' % ('a','b','c') 'a b c' # 传入多个字符 '%s %d %f %c %o %x %e' % ('a',1,1,97,20,20) # 传入(字符串 整数 浮点数) 输出Ascall 输出八进制 输出十六进制 输出科学计数法 '%16.3f' % 10.3 # 16代表字符串长度,3位保留3位小数,f位浮点数 '%-16.3f' % 10.3 # 负号代表左对齐 '%+16.3f' % 10.3 # 正好代表右对齐(默认右对齐) '%r' % 参数 # 消除参数的原始含义 >>> print('%r' % '\r') '\r'
-
2,format使用
'{} {} {}'.format('a','b','c') # 普通传参 'hello {}'.format('jack') '{a} {b} {c}'.format(a='a',b='b',c='c') # 关键字传参!!! '{0} {1} {2}'.format('a','b','c') # 索引位置传参 '{2} {0} {1}'.format('a','b','c') '{:.2%}'.format(0.3333) 转换为百分数,2代表保留2位小数 >>> f = 'hello {}'.format >>> f('!') # 把format当成一个函数使用 'hello !'
-
二进制,逢二进一 10以二进制的形式显示:0001
0000 代表 0 0001代表1 0010代表2 0011代表3 0100代表4 逢二进一
-
八进制,逢八进一 10以八进制的形式显示:0012
0000代表0 0001代表1 … 0007代表7 0010代表8 逢八进一
-
十六进制,逢十六进一 123456789ABCDEF
-
十进制,逢十进一
函数对象和函数调用的区别:
>>> list list为函数对象
<class 'list'>
>>> list() list()为函数调用
[]
三丶深浅复制
- 1, 给变量复制时内存里的活动
-
2,浅复制(修改原数据会改变copy数据) 主要发生在列表嵌套列表里面
>>> s = [1,2,3,[4,5,6]] >>> s1 = s.copy() >>> s [1, 2, 3, [4, 5, 6]] >>> s1 [1, 2, 3, [4, 5, 6]] >>> id(s),id(s1) (2493266256968, 2493266502344) >>> id(s[-1][1]),id(s1[-1][1]) (1469232320, 1469232320) 它们的内存地址都是一样的 >>> s[-1][0] = 100 >>> s 当我修改s的嵌套列表,copy下来的s1里的也改变 [1, 2, 3, [100, 5, 6]] 这就是浅复制,原始数据改变,copy的也会改变 >>> s1 [1, 2, 3, [100, 5, 6]]
为什么会发生浅复制,浅复制的根本原因在于,s[-1]和s1[-1]这两个嵌套列表在内存空间里面指向的是同一个列表的内存空间,所以当这个嵌套列表里面的元素改变时,不管是s,还是s1 里面的嵌套列表里面的元素就会改变。而外面这个大列表不会发生浅层复制的原因就是在于s和s1里面的大列表在内存空间里指向的不是同一个内存地址,所以就算改变了大列表里面的元素,copy的也是不受影响的
应该会更形象一点:
-
3,深复制
四丶bytes和byterray 字节序列对象(了解)(不允许修改)
-
1,bytes
如:如果不以0填充,想自己自定义(传入字符串):
*2, bytearray(可以修改)
都会以0填充
自定义数组
修改数组里面的内容
b = bytearray(b'dsd')
总结:
1,字符串的拼接有两个字符串直接相加 或 ‘’.join 这两个方法
2,字符串的格式化输出有%s或format方法
3,深浅复制的含义,浅复制只是不是真的复制,改变它的嵌套列表的值,copy下来和用切片[:]切下来的都会改变,而深复制就不会
4,bytes和bytearray都是字节序列对象,bytearray对象可以修改,会以Ascall值返回