第九章 字符串
字符串的驻留机制
如果内存中存在字符串的值,内存会直接分配给变量,不再创建新的对象 驻留机制的几种情况:
字符串长度为0或1时 符合标识符的字符串。标识符:数字字母下划线组成的字符串 字符串只在编译时进行驻留,而非运行时 [-5,256]之间的整数
a = 'python'
b = "python"
c = '''python'''
print ( a, id ( a) )
print ( b, id ( b) )
print ( c, id ( c) )
a = 'abc%'
b = 'abc%'
print ( a is b)
a. sys. intern ( b)
print ( a is b)
a = 'abc'
b = 'ab' + 'c'
c = '' . join( [ 'ab' , 'c' ] )
print ( a is b)
print ( a is c)
驻留机制的优缺点 优点:当需要相同的字符串的时候,直接在字符串池中拿就可以,能避免频繁的创建和销毁,提升效率和节约内存,所以拼接字符串和修改字符串是比较影响性能的。如果要拼接字符串的话,建议使用join方法,只创建一次对象 强制驻留的方法 sys包中的intern方法
字符串的常用操作方法
查询
a = 'hello'
a. index( 'lo' )
a. find( 'lo' )
a. index( 'k' )
a. find( 'k' )
大小写转换
a = 'HeLlo'
a. upper( )
a. lower( )
a. swapcase( )
a. capitalize( )
a = 'hello,python'
a. title( )
内容对齐
a = 'hello'
a. center( 20 , '*' )
a. ljust( 20 , '*' )
a. rjust( 20 , '*' )
a. zfill( 20 )
'-810' . zfill( 8 )
字符串的劈分
s = 'hello world python'
a = s. split( )
s1 = 'hello|world|python'
a1 = s1. split( sep= '|' )
a1 = s1. split( sep= '|' , maxsplit= 1 )
a2 = s1. rsplit( sep= '|' )
a2 = s1. rsplit( sep= '|' , maxsplit= 1 )
字符串的判断
s = 'hello,pyhon'
print ( '1.' , s. isidentifier( ) )
print ( '2.' , 'hello' . isidentifier( ) )
print ( '3.' , '张三' . isidentifier( ) )
print ( '4.' , '张三_12' . isidentifier( ) )
print ( '5.' , '\t' . isspace( ) )
print ( '6.' , 'abc' . isalpha( ) )
print ( '7.' , '张三' . isalpha( ) )
print ( '8.' , '张三1' . isalpha( ) )
print ( '9.' , '123' . isdecimal( ) )
print ( '10.' , '123四' . isdecimal( ) )
print ( '11.' , 'ⅡⅡⅡ' . isdecimal( ) )
print ( '12.' , '123' . isnumeric( ) )
print ( '13.' , '123四' . isnumeric( ) )
print ( '14.' , 'ⅡⅡⅡ' . isnumeric( ) )
print ( '15.' , 'abc1' . isalnum( ) )
print ( '16.' , '张三123' . isalnum( ) )
print ( '17.' , 'abc!' . isalnum( ) )
字符串的替换
s = 'hello,python'
print ( s. replace( 'python' , 'java' ) )
s1 = 'hello,python,python,python'
print ( s1. replace( 'python' , 'java' , 2 ) )
字符串的合并
lst = [ 'hello' , 'java' , 'python' ]
print ( '|' . join( lst) )
print ( ' ' . join( lst) )
tu = ( 'hello' , 'java' , 'python' )
print ( '|' . join( tu) )
print ( ' ' . join( tu) )
字符串的比较
print ( 'apple' > 'app' )
print ( 'apple' > 'banana' )
print ( ord ( 'a' ) , ord ( 'b' ) )
print ( ord ( '岳' ) )
print ( chr ( 97 ) , chr ( 98 ) )
print ( chr ( 23731 ) )
'''==与 is 的区别'''
''' == 比较的是值是否相等, is比较的是id'''
a= b= 'python'
c= 'python'
print ( a== b)
print ( a== c)
print ( a is b)
print ( a is c)
print ( id ( a) )
print ( id ( b) )
print ( id ( c) )
格式化字符串
name = 'lisa'
age = 20
print ( '我叫%s,今年%d岁' % ( name, age) )
print ( '我叫{0},今年{1}岁' . format ( name, age) )
print ( f'我叫{name},今年{age}岁' )
print ( '%10d' % 99 )
print ( '%.3f' % 3.1415926 )
print ( '%10.3f' % 3.1415926 )
print ( 'hellohello' )
print ( '{0:.3}' . format ( 3.1415926 ) )
print ( '{:.3f}' . format ( 3.1415926 ) )
print ( '{:10.3f}' . format ( 3.1415926 ) )
字符编码
s = '天涯共此时'
print ( s. encode( encoding= 'gbk' ) )
print ( s. encode( encoding= 'utf-8' ) )
byte = s. encode( encoding= 'gbk' )
print ( byte. decode( encoding= 'gbk' ) )
byte = s. encode( encoding= 'utf-8' )
print ( byte. decode( encoding= 'utf-8' ) )