简单介绍下变量的概念,详细记录下Python基础数据类型中字符串的有关内容,反正以后也会比较常用到!
学习笔记-基础篇后续应该还会有2章节,分别是记录 数据结构(列表、元组、字典和集合)以及 控制语句(if和where语句)。
所谓“变量”,就是会变化的值,为了方便管理,我们一般会为这个变化的值定义一个名称,以后我们要用到这个会变化的值时直接用定义好的名称即可。
通常我们用“赋值语句”将值保存在变量名称中。赋值语句包含变量名称、等号(=)以及需要被保存的值组成。
比如:
>>> height = 1.8
>>> height
1.8
我们定义了一个名为“height”的变量,并赋值1.80
>>> 2 * height
3.6
当我们计算2 * height的时候,会自动获取到变量height的值为1.80,并带入计算得到 3.6
单变量赋值
在上面介绍的 height = 1.80
就是单变量赋值方式,在等号(=)左边为一个变量名,右侧为需要存储的具体值
多变量赋值 将同一个值赋给三个变量
>>> a = b = c = 1
>>> a ,b ,c
(1, 1, 1)
多个值赋给多个变量
>>> x ,y = 1 ,2
>>> x ,y
(1, 2)
在Python中在对变量进行命名的时候需要遵循一些规则,否则可能会引发一些错误。 具体的变量命名规则如下:
为了让变量名能更容易阅读和理解,我们建议参考以下指南:
当我们定义一个变量后,在调用该变量的时候容易出现以下报错:
>>> 2*heigth
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'heigth' is not defined
如果你遇到这种报错,多数情况下是你的‘xxx’和之前定义的拼错了,这种问题最好不要拿出来问别人, 直接找到‘xxx’核查拼写吧。
在学习笔记01中我们输出的'hello world',以及今天在变量中出现的数字都是一类值,每个值都属于一种数据类型。一类是字符串,另外一类是数字。我们这里只介绍字符串的常用功能。
数据类型 | 举例 |
---|---|
字符串 | 'hello world' |
数字 | 1.80,3.6,1,2 |
字符串就是一系列字符,在Python中用引号括起来的都是字符串,其中引号可以是单引号('')/双引号("")和三引号(''' ''' 或 """ """),三引号主要用于一个字符串换行,反斜杠 \ 可以用来转义。
>>> name = 'Gdc'
>>> gender = "male"
>>> major = '''information
... and
... computation
... science
... '''
Python 中的字符串不能被修改,它们是 immutable 的。因此,向字符串的某个索引位置赋值会产生一个错误:
#name[]见字符串运算符中的元素访问
>>> name[5]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
拼接字符串
>>> name + gender
'Gdcmale'
重复输出字符串
>>> name * 2
'GdcGdc'
字符串元素访问 字符串是可以被 索引 (下标访问)的,第一个字符索引是 0。单个字符并没有特殊的类型,只是一个长度为一的字符串
>>> name[0]
'G'
字符串切片
>>> name[1:3]
'dc'
判断字符是否在字符串中
>>> 'G' in name
True
>>> 'g' in name
False
判断字符是否不在字符串中
>>> 'g' not in name
True
忽略转义字符
>>> stringTest = 'A \n b'
>>> print(stringTest)
A
b
>>> stringTest = r'A \n b'
>>> print(stringTest)
A \n b
函数 | 说明 |
---|---|
len(s) | 获取字符串s的长度,也就是字符个数 |
str(x) | 将任意类型转化为字符串类型 |
hex(x)或oct(x) | 整数x的16进制或8进制小写形式的字符串 |
chr(u) | Unicode编码转化为对应字符 |
ord(x) | 字符串转化为对应Unicode编码 |
格式化是对字符串进行格式表达的方式 在最简单的情况下,替换字段没有名称或将索引用作名称。
>>> "{}, {} and {}".format("first", "second", "third")
'first, second and third'
>>> "{0}, {1} and {2}".format("first", "second", "third")
'first, second and third'
然而,索引无需像上面这样按顺序排列。
>>> "{3} {0} {2} {1} {3} {0}".format("be", "not", "or", "to")
'to be or not to be'
命名字段的工作原理与你预期的完全相同。
>>> from math import pi
>>> "{name} is approximately{value:.2f}.".format(value=pi, name="π ")
'π is approximately3.14.'
字符串格式化使用.format()方法,用法如下: <模板字符串>.format(<逗号分隔的参数>)
>>> "{0:,.2f}".format(12345.6789)
'12,345.68'
>>> "{0:b},{0:c},{0:d},{0:o},{0:x},{0:X}".format(425)
'110101001,Ʃ,425,651,1a9,1A9'
>>> "{0:e},{0:E},{0:f},{0:%}".format(3.14)
'3.140000e+00,3.140000E+00,3.140000,314.000000%'
>>> "{0:=^20}".format("PYTHON")
'=======PYTHON======='
>>> "{0:*>20}".format("BIT")
'*****************BIT'
>>> "{:10}".format("BIT")
'BIT '
4、字符串常见操作
①str.capitalize() 返回原字符串的副本,其首个字符大写,其余为小写。
>>> 'gdc'.capitalize()
'Gdc'
②str.casefold() 返回原字符串消除大小写的副本。消除大小写的字符串可用于忽略大小写的匹配。 消除大小写类似于转为小写,但是更加彻底一些,因为它会移除字符串中的所有大小写变化形式。例如,德语小写字母 'ß' 相当于 "ss"。由于它已经是小写了,lower() 不会对 'ß' 做任何改变;而 casefold() 则会将其转换为 "ss"。。
>>> 'Gdc is A Good BOY'.casefold()
'gdc is a good boy'
③str.lower() 返回原字符串的副本,其所有区分大小写的字符均转换为小写。
>>> 'Gdc'.lower()
'gdc'
④str.upper() 返回原字符串的副本,其中所有区分大小写的字符均转换为大写。
>>> 'Gdc'.upper()
'GDC'
⑤str.count(sub[, start[, end]]) 返回子字符串 sub 在 [start, end] 范围内非重叠出现的次数。可选参数 start 与 end 会被解读为切片表示法。
>>> 'abc acc abcab'.count('ab')
3
⑥str.startswith(prefix[, start[, end]]) 如果字符串以指定的 prefix 开始则返回 True,否则返回 False。prefix 也可以为由多个供查找的前缀构成的元组。如果有可选项 start,将从所指定位置开始检查。如果有可选项 end,将在所指定位置停止比较。
>>> 'gdc_abcdefg'.startswith('gdc')
True
>>> 'gdc_abcdefg'.startswith('dc')
False
⑦str.endswith(suffix[, start[, end]]) 如果字符串以指定的 suffix 结束返回 True,否则返回 False。suffix 也可以为由多个供查找的后缀构成的元组。如果有可选项 start,将从所指定位置开始检查。如果有可选项 end,将在所指定位置停止比较。
>>> 'gdc_abcdefg'.endswith('dc')
False
>>> 'gdc_abcdefg'.endswith('fg')
True
⑧str.expandtabs(tabsize=8) 返回字符串的副本,其中所有的制表符会由一个或多个空格替换,具体取决于当前列位置和给定的制表符宽度。每 tabsize 个字符设为一个制表位(默认值 8 时设定的制表位在列 0, 8, 16 依次类推)。
>>> '01\t012\t0123\t01234'.expandtabs()
'01 012 0123 01234'
>>> '01\t012\t0123\t01234'.expandtabs(4)
'01 012 0123 01234'
⑨str.find(sub[, start[, end]]) 返回子字符串 sub 在 s[start:end] 切片内被找到的最小索引。可选参数 start 与 end 会被解读为切片表示法。如果 sub 未被找到则返回 -1。
>>> 'gdc_abcdefg'.find('dc')
1
>>> 'gdc_abcdefg'.find('dca')
-1
⑩str.rfind(sub[, start[, end]]) 返回子字符串 sub 在字符串内被找到的最大(最右)索引,这样 sub 将包含在 s[start:end] 当中。可选参数 start 与 end 会被解读为切片表示法。如果未找到则返回 -1。
>>> 'gdc_abcdcefg'.rfind('dc')
7
>>> 'gdc_abcdcefg'.rfind('dca')
-1
⑪str.format( args, kwargs) 执行字符串格式化操作。调用此方法的字符串可以包含字符串字面值或者以花括号 {} 括起来的替换域。每个替换域可以包含一个位置参数的数字索引,或者一个关键字参数的名称。返回的字符串副本中每个替换域都会被替换为对应参数的字符串值。
>>> "The sum of 1 + 2 is {0}".format(1+2)
'The sum of 1 + 2 is 3'
注解 当使用 n 类型格式化数字时,该函数在某些情况下会临时性地将 LC_CTYPE 区域设置为 LC_NUMERIC 区域。
⑫str.join(iterable) 返回一个由 iterable 中的字符串拼接而成的字符串。如果 iterable 中存在任何非字符串值包括 bytes对象则会引发 TypeError。调用该方法的字符串将作为元素之间的分隔。
>>> 'k'.join('abcd')
'akbkckd'
>>> ' '.join('abcd')
'a b c d'
⑬str.strip([chars]) 返回原字符串的副本,移除其中的前导和末尾字符。chars 参数为指定要移除字符的字符串。 如果省略或为 None,则 chars 参数默认移除空格符。实际上 chars 参数并非指定单个前缀或后缀;而是会移除参数值的所有组合:
>>> ' spacious '.strip()
'spacious'
>>> 'www.example.com'.strip('cmowz.')
'example'
⑭str.lstrip([chars]) 返回原字符串的副本,移除其中的前导字符。chars 参数为指定要移除字符的字符串。如果省略或为 None,则 chars 参数默认移除空格符。实际上 chars 参数并非指定单个前缀;而是会移除参数值的所有组合:
>>> ' spacious '.lstrip()
'spacious '
>>> 'www.example.com'.lstrip('cmowz.')
'example.com'
⑮str.rstrip([chars]) 返回原字符串的副本,移除其中的末尾字符。chars 参数为指定要移除字符的字符串。如果省略或为 None,则 chars 参数默认移除空格符。实际上 chars 参数并非指定单个后缀;而是会移除参数值的所有组合:
>>> ' spacious '.rstrip()
' spacious'
>>> 'mississippi'.rstrip('ipz')
'mississ'
⑯str.replace(old, new[, count]) 返回字符串的副本,其中出现的所有子字符串 old 都将被替换为 new。如果给出了可选参数 count,则只替换前 count 次出现。
>>> 'abcaaa'.replace('a','c')
'cbcccc'
⑰str.split(sep=None, maxsplit=-1) 返回一个由字符串内单词组成的列表,使用 sep 作为分隔字符串。如果给出了 maxsplit,则最多进行 maxsplit 次拆分(因此,列表最多会有 maxsplit+1 个元素)。 如果 maxsplit 未指定或为 -1,则不限制拆分次数(进行所有可能的拆分)。如果给出了 sep,则连续的分隔符不会被组合在一起而是被视为分隔空字符串 (例如 '1,,2'.split(',') 将返回 ['1', '', '2'])。sep 参数可能由多个字符组成 (例如 '1<>2<>3'.split('<>') 将返回 ['1', '2', '3'])。使用指定的分隔符拆分空字符串将返回 ['']。
>>> '1,2,3'.split(',')
['1', '2', '3']
>>> '1,2,3'.split(',', maxsplit=1)
['1', '2,3']
>>> '1,2,,3,'.split(',')
['1', '2', '', '3', '']
如果 sep 未指定或为 None,则会应用另一种拆分算法:连续的空格会被视为单个分隔符,其结果将不包含开头或末尾的空字符串,如果字符串包含前缀或后缀空格的话。因此,使用 None 拆分空字符串或仅包含空格的字符串将返回 []。
>>> '1 2 3'.split()
['1', '2', '3']
>>> '1 2 3'.split(maxsplit=1)
['1', '2 3']
>>> ' 1 2 3 '.split()
['1', '2', '3']
str.splitlines([keepends])
⑱str.rsplit(sep=None, maxsplit=-1) 返回一个由字符串内单词组成的列表,使用 sep 作为分隔字符串。如果给出了 maxsplit,则最多进行 maxsplit 次拆分,从 最右边 开始。如果 sep 未指定或为 None,任何空白字符串都会被作为分隔符。
⑲str.translate(table) 返回原字符串的副本,其中每个字符按给定的转换表进行映射。 然而,使用translate前必须创建一个转换表。这个转换表指出了不同Unicode码点之间的转换关系。要创建转换表,可对字符串类型str调用方法maketrans,这个方法接受两个参数:两个长度相同的字符串,它们指定要将第一个字符串中的每个字符都替换为第二个字符串中的相应字符。
>>> table = str.maketrans('cs', 'kz')
>>> table
{99: 107, 115: 122}
>>> 'this is an incredible test'.translate(table)
'thiz iz an inkredible tezt'
参考资料:
[1]《Python 3.7.7 documentation》
[2]《Python编程从入门到实践》
[3]《Python基础教程(第3版)》
[4]《Python语言程序设计基础 (第2版)》