Python第三章

同一运算符

同一运算符用于比较两个对象的存储单元,实际比较的是对象的地址

运算符描述
isis是判断两个标识符是不是引用同一个对象
is notis not 是判断两个标识符是不是引用不同对象

is与= = 的区别:
is用于判断两个变量引用对象是否为同一个,既比较对象的地址
= =用于判断引用变量引用对象的值是否相等,默认调用对象的_eq_()方法

>>>a=1000
>>>b=1000
>>>a==b
True
>>>a is b
False
>>>c=10
>>>d=10
>>>c is d 
True

整数缓存问题:
Python仅仅对比较小的整数对象进行缓存(范围为[-5,256])缓存起来,而并非是所有整数对象。需要注意的是,这仅仅是在命令中执行,而在Pycharm或者保存为文件执行,结果是不一样的,这是因为解释器做了一部分优化(范围是[-5,任何正整数])
总结:
1、is比较两个对象的id值是否相等,是否指向同一个内存地址
2、= =比较的是两个对象的内容是否相等,值是否相等
3、小整数对象[-5,256]在全局解释器范围内被放入缓存供重复使用
4、is运算符比= = 效率高,在变量和None进行比较时,应该使用 is

字符串

字符串的本质:字符序列。

字符串基本特点

Python的字符串是不可变的,我们无法对原字符串做任何修改。但可以将字符串的一部分复制到新创建的字符串,达到“看起来修改”的结果
Python不支持单字符类型,单字符也是作为一个字符串使用的

字符串的编码

Python3直接支持Unicode。可以表示世界上任何书面语言的字符。Python3的字符默认就是16位Unicode编码。ASCII码是Unicode编码的子集
使用内置函数ord()可以把字符转换成对应的Unicode码
使用内置函数chr()可以把十进制数字转换成对应的字符

>>>ord('A')
65
>>>ord('高')
39640
>>>chr(66)
'8'
引号创建字符串

可以通过单引号或双引号创建字符串。使用两种引号的好处是可以创建本身就包含引号的字符串,而不用使用转义字符
连续三个单引号或三个双引号,可以帮助我们创建多行字符串

>>>a="I'm a teacher!"
>>>print(a)
I'm a teacher!
>>>b='my name is "TOM"'
>>>print(b)
my name is "TOM"
>>>resume=''' name="wwj"
company="hbjm" age=18'''
>>>print(resume)
name="wwj"\ncompany="hbjm" age=18
空字符串和len()函数

Python允许空字符串的存在,不包含任何字符且长度为0.
len()用于计算字符串含有多少字符

>>>c=''
>>>len(c)
0

转义字符

可以使用“+特殊字符”,实现某些难以用字符表示的效果。

转义字符描述
(在行尾时)续行符
\反斜杠符号
单引号
"双引号
\b退格
\n换行
\t横向制表符
\r回车
字符串拼接

1、可以使用+将多个字符串拼接起来
(1)如果+两边都是字符串,则拼接
(2)如果+两边都是数字,则加法运算
(3)如果+两边类型不同,则抛出异常
2、可以将多个字面字符串直接放到一起实现拼接

>>>a='ste'+'qq'
>>>a
'steqq'
>>>b='ste' 'qq'
>>>b
'steqq'
字符串复制

使用*可以实现字符串复制

>>>a='ste'*3
>>>a
'stesteste'
不换行打印

前面调用print时,会自动大于一个换行符。
可以通过参数 end=“任意字符串”,实现末尾添加任何内容

>>>print('aa',end="#")
>>>print('bb',end="\t")
>>>print('cc')
aa#bb	cc
从控制台读取字符串

使用input()从控制台读取键盘输入的内容

>>>myname=input("请输入名字:")
请输入名字:wwj
>>>myname
'wwj'
str()实现数字转型字符串

str()可以帮助我们将其他数据类型转换为字符串
当我们调用print()函数时,解释器自动调用了str()将非字符串的对象转成了字符串

使用[]提取字符

字符串的本质是字符序列,可以通过在字符串后添加[],在[]里指定偏移量,提取该位置的单个字符
正向搜索:最左侧第一个字符,偏移量是0,以此类推,直到len(str)-1为止
反向搜索:最右侧第一个字符,偏移量是-1,倒数第二个是-2,以此类推,直到-len(str)为止

>>>a="sgagagawegagagwagaw"
>>>a[3]
'g'
>>>a[-2]
'a'
replace()实现字符串替换

字符串是“不可改变”的。但是有时候需要替换某些字符,只能通过创建新的字符串来实现

>>>a='abcdefghijklmnopqrstuvwxyz'
>>>a.replace('c','高')
'ab高defghijklmnopqrstuvwxyz'

整个过程中,实际上是创建了新的字符串对象,并指向了变量a,而不是修改了以前的字符串

字符串切片slice()操作

切片slice()操作可以让我们快速的提取子字符串,标准格式为:

[起始偏移量start:终止偏移量end:步长step]

典型操作(三个量为正数的情况)如下:

操作和说明示例结果
[:] 提取整个字符串“abcdef”[:]“abcdef”
[start:]从start索引开始到结尾“abcdef”[2:]“cdef”
[:end]从头开始直到end-1“abcdef”[:2]ab
[start:end]从start到end-2“abcdef”[2:4]cd
[start🔚step]从start到end-1,步长是step“abcdef”[1:5:2]“bd”

其他操作(三个量为负数)的情况:

示例说明结果
“abcdefghijklmnopqrstuvwxyz”[-3:]倒数三个“xyz”
“abcdefghijklmnopqrstuvwxyz”[-8:-3]倒数第八个到倒数第三个(包头不包尾)“stuvw”
“abcdefghijklmnopqrstuvwxyz”[::-1]步长为负,从右到左反向提取“zyxwvutsrqponmlkjihgfedcba”

切片操作时,起始偏移量和终止偏移量不在[0,字符串长度-1]这个范围,也不会报错。== 起始偏移量小于0则会当做0,终止偏移量大于“长度-1”会被当做-1。==

split()分割和join()合并

split()可以基于指定分隔符将字符串分隔成多个子字符串(存储到列表中)。如果不指定分隔符,则默认使用空白字符(换行符/空格/制表符)

>>>a="to be or not to be"
>>>a.split()
['to','be','or','not','to','be']
>>>a.split('be')
['to','or not to','']

join()的作用和split()的作用刚好相反,用于将一系列子字符串连接起来

>>>a=['ste','ateq','sgd']
>>>'*'.join(a)
'ste*ateq*sgd'
>>>"".join(a)
'steateqsgd'

**拼接字符串要点:**使用字符串拼接符+,会生成新的字符串对象,因此不推荐使用+来拼接字符串。推荐使用join函数,因为join函数在拼接字符串之前会计算所有字符串的长度,然后逐一拷贝,仅新建一次对象。

import time
time01=time.time()
a=""
for i in range(100000000)
	a+="ste"
time02=time.time()
print("运算时间:"+str(time02-time01))

time03=time.time()
li=[]
for i in range(100000000)
	li.append("ste")
a=''.join(li)
time04=time.time()
print("运行时间:"+str(time04-time03))
#join()函数运行时间比+连接符运行时间短
字符串驻留机制和字符串比较

字符串驻留:仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串驻留池中。Python支持字符串驻留机制,对于符合标识符规则的字符串(仅包含下划线、字母和数字)会启用字符串驻留机制

>>>a="aaabb_a"
>>>b="aaabb_a"
>>>a is b
True
>>>c="ab^"
>>>d="ab^"
>>>c is d
False
>>>c==d
True
字符串的比较和同一性

可以直接使用= =,!=对字符串进行比较,是否含有相同字符
我们使用is/not is判断两个对象是否是同一个对象,比较的是对象的地址,即id(obj1)是否和id(obj2)相等

成员操作符

in/not in关键字,判断某个字符(子字符串)是否存在于字符串中

>>>a='abcd'
>>>'b' in a
True
>>>'c' not in a
False
字符串常用方法汇总
常用查找方法:

a=‘abcdegsede’

方法和使用示例说明结果
len(a)字符串长度10
a.startswith(‘ab’)指定字符串开头True
a.endswith(‘de’)指定字符串结尾True
a.find(‘d’)第一次出现指定字符串的位置3
a.rfind(‘d’)最后一次出现指定字符串的位置8
a.count(‘d’)指定字符串出现次数2
a.isalnum()所有字符全是字母或数字True
strip()去除首尾信息:

通过strip()去除字符串收尾指定信息
通过lstrip()去除字符串左边指定信息
通过rstrip()去除字符串右边指定信息

>>>"*s*x*e*".strip("*")
's*x*e'
>>>"*s*x*e*".lstrip("*")
's*x*e*'
>>>"*s*x*e*".rstrip("*")
'*s*x*e'
>>>" sxe ".strip()
'sxe'
大小写转换

a=‘gonnian nain anii,AF’

示例说明结果
a.capitalize()产生新的字符串,首字母大写‘Gonnian nain anii,AF’
a.title()产生新的字符串,每个单词首字母大写‘Gonnian Nain Anii,AF’
a.upper()产生新的字符串,所有字符转成大写’GONNIAN NAIN ANII,AF‘
a.lower()产生新的字符串,所有字符转成小写’gonnian nain anii,af‘
a.swapcase()产生新的字符串,所有字母大小写转换‘GONNIAN ANII,af’
格式排版

center()、ljust、rjust()这三个函数用于对字符串实现排版

>>>a='stt'
>>>a.center(10,'*')
'***stt****'
>>>a.center(10)
'   att    '
>>>a,ljust(10,'*')
'stt*******'
其他方法

1、isalnum()是否为字母或数字
2、isalpha()检测字符串是否只由字母组成(含汉字)
3、isdigit()检测字符串是否只由数字组成
4、isspace()检测是否为空白符
5、isupper()是否为大写字母
6、islower()是否为小写字母

字符串的格式化
format()基本用法

str.format()函数增强了字符串格式化的功能。
基本语法是通过{}和:来代替以前的%
format函数可以接受不限个参数,位置可以不按顺序

>>>a="名字是:{0},年龄是:{1}"
>>>a.format("wwj",10)
'名字是:wwj,年龄是:10'
>>>b="名字是:{0},年龄是:{1},{0}是个好人"
>>>b.format("wwj",10)
'名字是:wwj,年龄是:10,wwj是个好人'
>>>c="名字是{name},年龄是{age}"
>>>c.format(age=10,name="wwj")
'名字是wwj,年龄是10'

可以通过{索引}/{参数名},直接映射参数值,实现对字符串的格式化

填充与对齐

填充常跟对齐一起使用
^、<、>分别是居中、左对齐、右对齐,后面带宽度
:号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充

>>>"{:*>8}".format("245")
'*****245'
>>>"我是{0},我喜欢的数字是{1:*^8}".format("wwj","666")
'我是wwj,我喜欢的数字是**666***'
数字格式化

浮点数通过f,整数通过d进行格式化

数字格式输出描述
3.1415926{:.2f}3.14保留小数点后两位
3.1415926{:+.2f}3.14带符号保留小数点后两位
2.71828{:.0f}3不带小数
5{:0>2d}02数字补零(填充左边,宽度为2)
5{:x<4d}5xxx数字补x(填充右边,宽度为4)
1000000{:,}1,000,000以逗号分隔的数字格式
0.25{:.2%}25.00%百分比格式
1000000000{:.2e}1.00E+09指数记法
13{:10d}13右对齐(默认,宽度为10)
可变字符串

Python中字符串属于不可变对象,不支持原地修改,如果需要修改其中的值,只能创建新的字符串对象。但是,经常我们需要原地修改字符串,可以用io.StringIO()对象或者array模块

>>>import io
>>>s="hello, ste"
>>>sio=io.StringIO(s)
>>>sio
<_io.StringIO object at 0x02F462B0>
>>>sio.getvalue()
'hello, ste'
>>>sio.seek(7)
7
>>>sio.write('g')
1
>>>sio.getvalue(s)
'hello, gte'

文章均为本人观看视频学习所记录的知识点笔记(哔哩哔哩视频链接https://www.bilibili.com/video/BV1tU4y1t7rv

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值