字符串是一个字符序列,(提醒:序列是Python的一个重要的关键词),其中存放UNICODE字符。Python中的字符串是不可变的(immutable),即对字符串执行操作时,总是产生一个新的字符串而不是修改现有的字符串。

 
字符串常量的表示
 
1. 3种表示
 #单引号
A = 'Python'
#引号
B = "Python"
#三引号
C = """Python"""

2. 为什么要这么麻烦?

 
(1)当字符串中包含了某种引号字符,那么使用与该引号字符不同的引号包含字符串时,可以直接使用该引号,而不用使用转义字符
 #单引号不用转义
A = "I'm a Python newcomer"
#引号不用转义
B = 'I have learnt "C" language'

(2)三引号可以让输出的字符串直接跨行

 
当没有三引号时,不得不这样做:
A = "I'm \n\
a newcomer"

如果使用三引号,可以不用使用\n\

B = """I'm a
newcomer"""
3. 过长字符串的跨行表示
 
建议使用圆括号将多行字符串包括在一起,而不是用转义符。

 #建议
A = ("I'm "
"a newcomer")
#不建议
B = "I'm " + \
"a newcomer"
C = "I'm \
a newcomer"
4. 转义序列
 
转义字符 含义
\newline 忽略换行
\\ \
\' '
\" "
\a ASCII蜂鸣
\b ASCII退格
\f ASCII走纸
\r 回车CR
\n 换行LF
\t ASCII制表符
\v ASCII垂直指标
\ooo 给定八进制字符
\xhh 给定8位十六进制字符
\uhhhhh 给定16位十六进制字符
\Uhhhh hhhh 给定32位十六进制字符
\N{name} 给定名称的Unicode字符,name是一个标准Unicode名称
字符串的比较
 
1. < <= > >= == !=与C语言的库函数相似
 
2. Unicode字符比较存在的问题
(1)有些Unocde字符可以使用多种字节序列表示,比如某些字符可以使用3中不同的UTF-8编码字节表示。
解决方法:使用unicodedata模块的normalize函数,并将'NKFD'作为该函数的第一个实参。
 import unicodedata
title = u"Klüft skräms inför på fédéral électoral große"
B = unicodedata.normalize('NFKD', title).encode('ascii','ignore')
print(B)

(2)字符排序问题

在一些国家中,字母字符的顺序不同于英美国家,例如在瑞典语中,a排在z之后。对此Python不进行推测,而是使用字符串的内存字节进行比较,此时的排序是基于Unocode字元的,当然我们也可以自定义Python的排序方法。
 
字符串的提取——分片
    这和序列的提取——分片是一样的,这放在下一篇文章讲。
 
字符串操作符和方法
 
1. 操作符
(1)比较操作符< <= > >= == !=与C语言的库函数相似
(2)*(复制),*=,+(追加),+=
(3)成员关系测试 in
 
2. 方法
    字符串实现了所以通用序列的方法,也带有自己特别的方法,详见帮助文档,这里不说。
(1)格式化字符串的两种方法
 
printf风格字符串格式化
    %操作符,用于格式化的一个操作符。形式为:
  1. format % values
其中format是一个格式化字符串,%用于将后面的values替换前面的格式字符串,作用和C语言的sprintf一样。
在format字符串中带有一个以%开头的转换标识符。用于指示后面value如何替换前面的format字符串。
 
 print('number is %d'%10)
将输出number is 10

其中的%d就是一个转换标识符,表示这里是一个整数,%d被替换成真实值10。

 
转换标识符不仅仅一种,它包含两个或以上的字符,并且顺序化地包含以下内容:(提醒:顺序是固定的,但有的是可选)
1) 必须以%开头
2)Mapping key(可选),由一对括号包含的字符序列
3)转换标志(可选),作用于一些转换类型的结果
4)最小宽度字段(可选),用于使转换标识符最后转换得到的长度达到指定的最小宽度字段
5)精度(可选),含义取决于格式字符
6)长度修饰符(可选),修饰整数
7)转换格式字符(必须)
 

转换标志有:

Flag Meaning
'#' 转换标志的起始符
'0' 用0在数的字段宽度内进行填充
'-' 左对齐 (如果给出了上面的0转换和左对齐转换,则忽略0转换
' ' (一个空格)在一个有符号转换中,如果是一个正数,那么在开头加上空格而不是'+'
'+' 若数为正数,则在开头添加'+'(忽略空格标志).
最小宽度字段:
    如果字符的数量小于指定的最小宽度字段,则会在剩余的地方进行填充(默认是空格,可以由转换标志修改填充的字符);如果大于,则原样输出。
 
精度:含义取决于格式字符
 
格式字符 含义
dioux 精度表示最少显示数字位数,如果精度过大则以0填充,否则原样输出
ef 精度表示小数点后的数字位数
g 精度表示最大有效位
s 精度表示最大的字符数
   
长度修饰符:
h,l,L
h:说明整数是short型
l:说明整数是long型
L:当和efg使用时,L说明是long double型
 

The conversion types are:

Conversion Meaning Notes
'd' Signed integer decimal.  
'i' Signed integer decimal.  
'o' Signed octal value. (1)
'u' 已废弃,等同于d (7)
'x' Signed hexadecimal (lowercase). (2)
'X' Signed hexadecimal (uppercase). (2)
'e' Floating point exponential format (lowercase). (3)
'E' Floating point exponential format (uppercase). (3)
'f' Floating point decimal format. (3)
'F' Floating point decimal format. (3)
'g' Floating point format. Uses lowercase exponential format if exponent is less than -4 or not less than precision, decimal format otherwise. (4)
'G' Floating point format. Uses uppercase exponential format if exponent is less than -4 or not less than precision, decimal format otherwise. (4)
'c' Single character (accepts integer or single character string).  
'r' String (converts any Python object using repr()). (5)
's' String (converts any Python object using str()). (5)
'a' String (converts any Python object using ascii()). (5)
'%' 输出%  

Notes:

  1. The alternate form causes a leading zero ('0') to be inserted between left-hand padding and the formatting of the number if the leading character of the result is not already a zero.当使用了转换标志0,那么填充0的时候,填充的位置将是0o和数字之间,比如%#08o' % 34的结果是0o000042

  2. The alternate form causes a leading '0x' or '0X' (depending on whether the 'x' or 'X' format was used) to be inserted between left-hand padding and the formatting of the number if the leading character of the result is not already a zero.当使用了转换标志0,那么填充0的时候,填充的位置将是0x和数字之间,比如%#08x' % 34的结果是0x000022。

  3. The alternate form causes the result to always contain a decimal point, even if no digits follow it.

    The precision determines the number of digits after the decimal point and defaults to 6.精度控制决定了小数点后的位数,默认是6位

  4. The alternate form causes the result to always contain a decimal point, and trailing zeroes are not removed as they would otherwise be.

    The precision determines the number of significant digits before and after the decimal point and defaults to 6.

  5. If precision is N, the output is truncated to N characters.如果上面指定的精度是N,那么字符串的最大长度是N

  1. See PEP 237.

Since Python strings have an explicit length, %s conversions do not assume that '\0' is the end of the string.

因为Python的String有显式的长度,所以%s转换不认为'\0'是字符串的结尾

Changed in version 3.1: %f conversions for numbers whose absolute value is over 1e50 are no longer replaced by %g conversions.

【原创】Python第二章——字符串的更多相关文章

  1. 简学Python第二章__巧学数据结构文件操作

    #cnblogs_post_body h2 { background: linear-gradient(to bottom, #18c0ff 0%,#0c7eff 100%); color: #fff ...

  2. Python 第二章-列表和元组

    第二章-列表和元组 2.0      在Python中,最基本的数据结构是序列(sequence).序列中的每个元素被分配一个序列号-即元素的位置, 也称为索引.第一个索引是0,第二个是1,以此类推. ...

  3. python第二章:数据类型--小白博客

    标准数据类型 Python3 中有六个标准的数据类型: Number(数字) String(字符串) List(列表) Tuple(元组) Set(集合) Dictionary(字典) Python3 ...

  4. Python第二章-变量和数据类型

    变量和数据类型 一.什么是变量,常量 思考:程序执行指的是什么? 对数据进行存储处理和计算,最终获得结果,这是程序执行的本质. 变量的概念和在数学中的变量的概念一样的,只是在计算机程序中,变量不仅可以 ...

  5. 【原创】Python第二章——行与缩进

    Python的基本组成——逻辑行和缩进 a="我是一个物理行" a="""我是一个逻辑行 因为我一条语句便跨越了2个物理行""&q ...

  6. 【原创】Python第二章——标识符命名规则

    在Python中,一切都是对象,包括常量数据类型,如整数数据类型(1,2,3...),字符串数据类型("ABC").想要使用这些对象,就要使用它的对象引用.赋值操作符,实际上是使得 ...

  7. python第二章:控制流

    变成实际上是一个过程的提现,每个过程都是有多个流程块组成. 比如:判断是否下雨的过程 1.布尔值 在第一章最后举例了比较操作后,最终返回的结果 True or False True 和 False是一 ...

  8. machine learn in python 第二章2.1.1

    1大约 sklearn.datasets from sklearn.datasets import load_iris import numpy as np data = load_iris() da ...

  9. python 第二章 对象与类型

    可变对象和不可变对象 1,可变对象,list(列表),dict(字典),集合(set),字节数组. 2,不可变对象,数值类型,字符串,字节串,元组(具体形式 ()). 注意条件:可变和不可变指的是该对 ...

随机推荐

  1. 利用jsonp调用外部ip地址池

    <html lang="en"> <head> <meta charset="UTF-8"> <title>Do ...

  2. Python——我所学习的turtle函数库

    1基础概念 1.1 画布(canvas) 画布就是turtle为我们展开用于绘图区域, 我们可以设置它的大小和初始位置. 常用的画布方法有两个:screensize()和setup(). (1)tur ...

  3. java根据图片创建日期,或最后修改日期重命名

    import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import jav ...

  4. nodejs + 小程序云函数 生成小程序码

    前言:这个东西坑死我了 业务需求要生成小程序码 然后我找了两天的资料 运行 生成一堆的乱码 死活就是不能生成 最后看了一遍博客 套用了一下 自己又简单的改了一下  nodejs 我是刚刚接触  有很多 ...

  5. JAVA中执行JavaScript代码并获取返回值

    JAVA中执行JavaScript代码并获取返回值 场景描述 实现思路 技术要点 代码实现 测试方法 运行结果 改进空间 场景描述 今天在CSDN上偶然看到一个帖子对于一段字符串 “var p=‘xx ...

  6. java上传文件获取跟目录的办法

    在java中获得文件的路径在我们做上传文件操作时是不可避免的.web 上运行1:this.getClass().getClassLoader().getResource("/"). ...

  7. Elasticsearch System Call Filters Failed to Install

    Elasticsearch starts to run, error occurs: : system call filters failed to install; check the logs a ...

  8. Automated generation of test oracles using a model-driven approach

    一.基本信息 标题:Automated generation of test oracles using a model-driven approach 时间:2013 出版源:Information ...

  9. vue solt 属性浅析

    solt 也就是插槽,通俗的讲也是和div,span,p等类似的html标签,只是solt是子组件中的html标签.它显示不显示完全是由父组件决定的, 但是显示的位置是由子组件自己决定的.插槽主要分为 ...

  10. div+css+position实现简单的纵向导航栏

    完成效果: 这应该是很简单的纵向导航栏了. OK,进入正题 首先,我们看上面的效果图可以分析得出,要实现这个效果需要用到的技术点 1.hover 2.position 3.布局 我认为在这个效果的实现 ...