python学习笔记—字符串类型(string)1,基础

描述

python的字符串类型属于不可变数据类型(关于这个可以看我的第一篇文章),也就是当你修改变量的值时,系统会重新分配一个内存地址给他。而且python的字符串变量有复用的特性,即同一个值的不同变量指向同一个内存地址。
示例:

>>> a = '123456789'
>>> b = '123456789'
>>> id(a)
3019085027056
>>> id(b)
3019085027056
>>>

定义

python中的字符串可以通过 ’ ’ 或者 " "来定义,两个的具有同样的效果。
示例:

>>> a = '123'
>>> b = "123"
>>> id(a)
3019085518472
>>> id(b)
3019085518472
>>>

python中没有 char 类型,单个的字符也用字符串来表示。

访问

访问字符串时,可以将字符串看成一个字符数组,用下标来访问单个字符,用区间来访问一段字符。
示例:

>>> a = 'Hello World'
>>> a[0]
'H'
>>> a[0:4]   #不能完整的截取 ‘Hello’
'Hell'
>>> a[0:5]
'Hello'

对字符串进行切片时,注意它是一个左闭,右开的区间。也就是说,选取区间[0:4]时,不能取到下标为4的元素,取值范围为 0,1,2,3。所以想要截取到最后一个字符时右区间值要比对应的下标大 1。
同时python支持反向切片,即下标可为负数。如图:

stringabcdefg
正序0123456
反序-7-6-5-4-3-2-1

这样当我们只想取后面几个字符 的时候就很方便了。
示例:

>>> s = 'abcdefg'
>>> s[-1]
'g'
>>> s[6]
'g'
>>> s[-7:-1]   #不能取到完整的字符串
'abcdef'
>>> s[-7:]
'abcdefg'
>>> s[-5:-7]  #区间方向写反了
''
>>> s[-7:-5]
'ab'
>>>

这里要注意了,当切片区间为负数时,任然需要按照正序的方向来写,如在这里反向截取整个字符串应写为s[-7:]
这里还有一个问题要注意,当切片的右区间取 -1 时并不能截取到最后一个字符,原因之前已经讲过了。此外 -1 的后面不是 00只表示第一个元素
所以要截取到最后一个元素应将右区间省略,以表示截取至最后一个元素。同样的当截取的起点是 0 是也可省略左区间,默认为 0 。
示例:

>>> s = 'abcdefg'
>>> s[-2:]  #截取最后两个元素
'fg'
>>> s[:2]   #截取开头两个元素
'ab'

字符串运算符

python中常用的字符串运算符如下表:

操作符描述
+字符串连接
*重复输出字符串
[]通过索引获取字符串中字符
[ : ]截取字符串中的一部分,遵循左闭右开原则,str[0,2] 是不包含第 3 个字符的。
in成员运算符 - 如果字符串中包含给定的字符返回 True
not in成员运算符 - 如果字符串中不包含给定的字符返回 True
r/R原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母 r(可以大小写)以外,与普通字符串有着几乎完全相同的语法。
%格式字符串(见后两节)

示例:

>>> a = "Hello World"
>>> b = a + " this is python"         #  + 运算
>>> print(b)
Hello World this is python
>>> print(a*2)                        # * 运算
Hello WorldHello World
>>> print("H" in a)                   # in运算
True
>>> print("H" not in a)               # not in运算
False
>>> b = r"a\\b"                       # r/R 运算
>>> print(b)
a\\b
>>> b = "a\\b"
>>> print(b)
a\b

字符串转义字符

python中同样用 ‘\’ 做转义字符,详细情况如下表:

转义字符描述
\(在行尾时)续行符
\\反斜杠符号
\’单引号
\"双引号
\a响铃
\b退格(Backspace), 将光标位置回退一格
\000
\n换行
\v纵向制表符
\t横向制表符
\r将光标的位置回退到行首,在写文件时,‘\r\n’可用来换行。’\r’的使用还可以参考 lizz07的博客
\f换页
\oyy八进制数,yy代表的字符,例如:\o12代表换行
\xyy十六进制数,yy代表的字符,例如:\x0a代表换行
\other其它的字符以普通格式输出

示例:

>>> a = 'abcd\000efg'           #“\000” 转义符
>>> print(a)
abcd efg
>>> a = 'abc'                   #“\v”  纵向制表符
>>> for i in a:
...     print(i)
...     print('\v')
...
a


b


c
>>> b = "abc" + '\b' + "123"   #" \b" 回退符
>>> print(b)
ab123
>>> print(c + '\f' + "123" + '\f' + '456')  #   '\f' 转义符 
ab123
     123
        456

格式化输出

python字符串格式化符号:

符 号描述
%c格式化字符及其ASCII码
%s格式化字符串
%d格式化整数
%u格式化无符号整型
%o格式化无符号八进制数
%x格式化无符号十六进制数
%X格式化无符号十六进制数(大写)
%f格式化浮点数字,可指定小数点后的精度
%e用科学计数法格式化浮点数
%E作用同%e,用科学计数法格式化浮点数
%g%f和%e的简写
%G%f 和 %E 的简写
%p用十六进制数格式化变量的地址

其中使用频率较高的是 %s,%d,%f。

格式化操作符辅助指令:

符号功能
*定义宽度或者小数点精度
-用做左对齐
+在正数前面显示加号( + )
<sp>在正数前面显示空格
#在八进制数前面显示零(‘0’),在十六进制前面显示’0x’或者’0X’(取决于用的是’x’还是’X’)
0显示的数字前面填充’0’而不是默认的空格
%‘%%‘输出一个单一的’%’
(var)映射变量(字典参数)
m.n.m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)

示例:

>>> i = 100
>>> print("%+d" % i)
+100
>>> print('%o' % i)   #输出8进制数
144
>>> print('%x' % i)  #输出16进制数
64
>>> print("%#x" % i)    #  使用 ‘#’ 辅助符号
0x64
>>> print('%.2f' % i)  # m.nf  m表总位数, n表小数点位数
100.00
>>> print('%e' % i)       #输出计数法的浮点数
1.000000e+02

在使用 %s 时注意,不是所有的变量都能直接转化成字符串。当变量为元组会出现此类情况。
示例:

>>> t = ('127.0.0.1', 1234)
>>> print('localhost: %s' % t)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting(在字符串格式化期间,没有转化所有的参数)
>>>

解决方法就是不将元组单独的作为一个参数,而是将他作为一个可迭代的对象。(暂时认为是如此,求教)

>>> print('localhost: %s' % (t, ))
localhost: ('127.0.0.1', 1234)

前缀

有时字符串前会带有前缀,常见的有 r/u/b。
其含义如下表:

前缀含义
r / R (raw string)原始字符串,所有转义字符失效
u (Unicode)使用Unicode编码,避免编码问题。python 3 字符串默认使用Unicode编码
b (bytes)将字符串对象转化为字节序列对象,在网络交互时传输的都是bytes类型的数据
f (format)用来格式化字符串,可以添加参数

示例:

>>> name = 'world'
>>> name2 = 'python 3'
>>> print(f"Hello {name}, i am {name2}")
Hello world, i am python 3

总结

上面表格中列出的符号还有一些不会用 。

转义符:\o, \x, \f,\other
格式化输出辅助符:*,<sp>

以上是我的学习经验,如果发现有任何错误,请帮忙指出来,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值