【Python】字符串1

1   字符串的表示

文本序列类型   -- 字符串(str)

由 Unicode 码点 构成的不可变序列对象(不可在原处修改),用于文本处理。

通过字符串字面量或 str 构造函数可以创建字符串对象。

字符串对象支持表达式操作(合并,切片,索引)和字符串对象的方法和 str 类方法调用方法返回的字符串是新建的字符串。

Python 无字符类型

字符串的创建

'Python'
"python"
"""Python"""
r'C:\python'    # 原始字符串,将 \ 看成普通字符,不进行转译
u'python'       # Unicode 字面量
f'python'       # 格式串字面量

字节字面量(b' ',B' ',b"  ",B"  ",)

用于创建 bytes 对象,而不是 str 对象

不论编码声明制定何种编码,Bytes 对象仅包含 ASCll 字符,数值大于 127 的字节必须用转义字符表示

创建字符串

Class str(object = ‘’)

将对象转换为字符串;若没有给定 object ,则返回空串;

否则,返回 object.__str__(),即对象的可打印串表示,若 object 指定一个串,则返回串本身;否则返回repr(object)

Class str(object = b' ', encoding = 'utf-8', errors = 'strict')

给定 encoding 或 errors,则 object 属于字节类型对象(bytes 或 bytearray),调用等价于 bytes.decode(encoding,errors)

print(str(b'Zoot!'))
print(type(b'Zoot!'))
print(str(1/3))

ASCll 编码 

标准 ASCll 码:使用7位二进制表示128个字符,包括英语大,小写,数字0-9,标点符号,特殊控制字符。

GB2312 编码:兼容ASCll

收录简化汉字及一般符号、序号、数字、拉丁字母、日文假名、希腊字母、俄文 字母、汉语拼音符号、汉语注音字母,共 7445 个字符。  两字节、区位码。进行“分区”处理,每区含有94个汉字/符号。  GBK、CP936 均采用两字节表示中文

Unicode 通过多八位编码字符集的简称,支持现今世界各种不同语言的字面文本的交换,处理及显示:

所有字符都分配了一个唯一的数字编号,称为码位 / 码点

可采用UTF-8,UTF-16,UTF-32(4字节)编码规则进行

Unicode 码表

print(ord('知'))
print(chr(30693))
print('知'.encode('utf8'))
s = 'Python Project'
print(len(s))
print(len(s.encode('utf8')))
print(len(s.encode('utf16')))

Python2  默认采用ASCll编码

Python3  默认采用 UTF-8 编码,可以不加声明

2.   字符串格式化

str.format

f''

字符串格式化参数比较多,建议使用 jupyter 输入如下代码,可一次输出多行的值。

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

方法 1 :str.format(*args,**kwargs)

https://docs.python.org/3/library/string.html#formatstrings

格式串语法:由{}引起的替换域和字面量文本构成,每个替换域包括位置参数的数字索引或关键字参数的关键字名;

返回值:替换域被对应参数的串值代替后的原串的拷贝;若要输出引号,则通过{{和}}输出

格式串  { [ field name] [!conversion] [:format_spec] }

[field name]: 以参数名arg_name开始,可以是数字或关键字

        对应参数的标识符

        数字,对应参数的编号

        标识符.属性

        标识符[index]

[! conversion ]

        !s 调用str()  返回对象的可打印串表示

        !a 调用ascii()  返回 \x \u 或 \U 跳过repe()  返回非 ASCII 字符

        !r 调用 repr()  返回包含对象可打印表示的串

字符串{}.format()

大括号中包含数字索引

point = dict(x=2.5,y=3.5)
# 大括号中包含数字索引
"Abscisa value:{0},coordinate value:{1}".format(point['x'],point['y'])
"Abscisa value:{},coordinate value:{}".format(point['x'],point['y'])

大括号中包含关键字

point1 = dict(x=2.5,y=3.5)
point2 = dict(x=5,y=7)
'Abscisa value: {0[x]}, coordinate value:{0[y]}'.format(point1)
"Abscisa value:{[x]}, coordinate value:{[y]}".format(point1,point2)
"Abscisa value: {x}, coordinate value:{y}".format(**point1)

 将字典的 key 作为位置参数

point = dict(x=2.5,y=3.5)
# 将字典的 key 作为位置参数
"Abscisa value:{0}, coordinate value:{1}".format(*point)

[[ fill ]   align ]  [sign] [#] [0] [ width] [ grouping_option] [.precision] [type]

 填充    对齐     符号             宽度               ,                   .精度     类型

字符串中{ 参数序号 : 格式控制 }

填充:在固定宽度的情况下填空的东西,默认为空格,fill 为你给定的填充类型。

对齐:在填充中选择左对齐(<),右对齐(>),居中(^)。

符号:

        +:正数前加 + ,负数前加 - 。

        - :正数前不加,负数前加 - 。

        (空格):正数前加空格,负数前加负号。

# :符号说明

        在二进制整数前,增加 0b

        在八进制整数前,增加 0o

        在十进制整数前,不添加

        在十六进制整数前,增加 0x (小写)

        在十六进制整数前,增加 0X (大写)

宽度.精度:

        width  即填充的尺寸,在复数和非数值类型不可使用;

        width.precision 在浮点数时,precision 决定浮点数小数点后位数;

                                 在字符串时,precision 决定使用字符串前 precision 位。

分组选项: ,(整数)  _(任意)  用于显示数字的千位分隔符。

类型:

        对于整数

                b   输出整数的二进制

                c   输出整数对应的 Unicode 字符

                d   输出整数的十进制

                o   输出整数的八进制

                x   输出整数的十六进制(小写)

                X   输出整数的十六进制(大写)

        对于浮点数

                e   输出浮点数的e的指数形式(小写)

                E   输出浮点数的E的指数形式(大写)

                f    输出浮点数

                %  输出浮点数的百分数类型

当不给定类型(默认为整数时),可使用 width (宽度) 加 [[ fill ]  align ] (填充对齐) 

当给定类型(如 f,e),使用 width.precision(宽度.精度),先由精度决定输出,当精度的宽度大于指定宽度时,按照精度给出的宽度输出,当精度的宽度小于指定的宽度时,按照宽度加填充的方式到达指定宽度后,输出。

point = (2,-3.5)

"Abscisa value:{0[0]}, coordinate value:{0[1]}".format(point)
"Abscisa value:{0}, coordinate value:{1}".format(*point)
#        {位置参数:填充元素 对齐 宽度}
"Abscisa value:{0:X<5}, coordinate value:{1:Y>8}".format(*point)
print()
#        {位置参数:填充元素 对齐 宽度.精度  类型}
"Abscisa value:{0:<.3f}, coordinate value:{1:>.3f}".format(*point)
"Abscisa value:{0:<4.3f}, coordinate value:{1:>4.3f}".format(*point)
print()
"Abscisa value:{0:X<8.3f}, coordinate value:{1:Y>8.3f}".format(*point)
"Abscisa value:{0:X^10.3e}, coordinate value:{1:Y>10.3e}".format(*point)

加入分组选项 (整数格式说明符不允许设置精度)

 ,只能用于 d (十进制) 当类型为b ( 二进制) o (八进制) x (十六进制)时报错

point = (20,-3000)
#        {位置参数:填充元素 对齐 符号 # 宽度 分组选项 类型}
"Abscisa value:{0:X<+#10_b}, coordinate value:{1:Y>-#10,}".format(*point)

 

方法2   

f-string 中的替换域(replacement_field)

name = 'Fred'
f"He said his name is {name}." 
f"He said his name is {name!a}." 
f"He said his name is {name!r}."
f"He said his name is {name!s}."
import decimal
width = 10
precision = 5
value = decimal.Decimal("12.34567")
f'result:{value:{width}.{precision}}'

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值