Python数据类型--字符串

前言:简述Python数据类型–字符串

与C/Java不同,Python中统一了字符字符串的概念,字符字符串的一种特例

  由 0 个或多个字符组成的有序字符序列。在Python中,用引号括起的都是字符串,其中的引号可以是单引号,也可以是双引号。

字符串中的三大引号

  引号包括单引号 ' ' ,双引号 " " 和 三引号 ''' ''' ,比如 'abc'"123" 等等。

python中,单引号和双引号可以交换使用,但双引号、单引号和三引号不能交换使用

print('I told my firend,"Python is my favorite language!"')
print("The language 'Python' is named after Monty Python,not the snake.")
print("One of Python's strength is its driverse and supportive community.")
print('My favorite '''language''' is Python!')
print('''My favorite 'language' is Python!''')
print(''My favorite '''language''' is Python!'')
print('''My favorite ''language'' is Python!''')

'''
  File "e:\Python\Pythoncode--Demo\Test01.py", line 4
    print('My favorite '''language''' is Python!')
                          ^
SyntaxError: invalid syntax
'''

  注意,单引号 '' 或双引号 " " 本身只是一种表示方式,不是字符串的一部分,因此,字符串 'abc' 只有 a,b,c 这 3 个字符。

  为什么要有单引号 ' ' ,双引号 " " 和 三引号 ''' ''' ?

回答上述问题前,我们先探讨一下,如何输出一句英文:I'm OK!

print('I'm OK!')
print("I'm OK!")
print('''I'm OK!''')
'''
  File "xx.py", line 1
    print('I'm OK!') # 错误发生在第二个单引号后面
             ^
SyntaxError: invalid syntax
'''

在用单引号括起的字符串中,如果包含撇号,就将导致错误。这是因为这会导致Python将第一个单引号和撇号之间的内容视为一个字符串,进而将余下的文本视为Python代码,从而引发错误。

编写程序时,编辑器的语法突出功能可帮助你快速找出某些语法错误。看到Python代码以普通句子的颜色显示,或者普通句子以Python代码的颜色显示时,就可能意味着文件中存在引号不匹配的情况。

显然,使用单引号' '引用I'm OK!再输出是不可行的,如果使用双引号" "引用一段含双引号的句子,可以输出吗?

print("春眠""觉晓")
'''
  File "xx.py", line 1
    print("春眠"不"觉晓")
              ^
SyntaxError: invalid syntax
'''

基于上述代码,可知单(双)引号不能引用含单(双)引号的字符串。但如果字符串本身含有单引号(双引号),则需要字符串只能使用双引号(单引号)括起

print('abc"def"gh')
print("sdf'sf'gr")
# abc"def"gh
# sdf'sf'gr

可以用转义字符\来标识

单引号,可以使用 \' 来表示,双引号可以使用 \" 来表示。

注意,这里的是反斜杠 \, 不是斜杆 /

print('I\'m OK!')
print("春眠\"不\"觉晓")
'''
I'm OK!
春眠"不"觉晓
'''

转义字符

如何输出语句:I'm ok.

print('I'm ok.')
# SyntaxError: invalid syntax

解释器会认为第二个引号字符就是这个字符串的结束标志,而不知道如何处理剩余的字符

为解决此问题,python定义一种特殊的标记来表示特殊字符,这种标记称为转义序列,转义序列由反斜杠(转义字符)(\)+字符数字组成的字符。转义序列作为一个整体翻译,而不是分开翻译。

>>> print('I\'m ok.')
I'm ok.
\+符号
\\反斜杠(\)
\'单引号(')
\"双引号(")
\+字符
\t制表符(横向)
\v制表符(纵向)
\n换行 newline
\r回车 return
\bbackspace

因为转义序列是字符,所以在print()语句中输出时,要用引号括起

>>> print('I\'m learning\nPython.')
I'm learning
Python.
>>> print('\\\n\\')
\
\

如果字符串里面有很多字符都需要转义,就需要加很多\

为了简化,Python还允许用r''表示''内部的字符串默认不转义
注意:r' '外不需要加引号,如果加了引号,那么就是去不转义的作用

>>> print('\\\t\\')
\       \
>>> print(r'\\\t\\')
\\\t\\

三引号''' '''的作用

表示带有换行的字符串。当字符串内部有很多换行时,用\n写在一行里不好阅读,为了简化,Python允许用'''...'''的格式表示多行内容

>>> print('''line1
... line2
... line3''')
line1
line2
line3

上面是在交互式命令行(Python.exe)内输入,注意在输入多行内容时,提示符由>>>变为...,提示你可以接着上一行输入,注意...是提示符,不是代码的一部分:

┌────────────────────────────────────────────────────────┐
│Command Prompt - python                           _ □ x │
├────────────────────────────────────────────────────────┤
│>>> print('''line1                                      │
│... line2                                               │
│... line3''')                                           │
│line1                                                   │
│line2                                                   │
│line3                                                   │
│                                                        │
│>>> _                                                   │
└────────────────────────────────────────────────────────┘

当输入完结束符''')后,执行该语句并打印结果。

如果写成程序并存为.py文件或在Python Shell中运行,就是:

print('''line1
line2
line3''')
# line1
# line2
# line3

多行字符串'''...'''还可以在前面加上r使用,请自行测试:

print(r'''hello,\n
world''')

hello,\n
world

字符串的主要特征

Python中的字符串是不可变对象

Python中的字符串属于序列

凡是支持序列

字符串的操作

  字符串是字符的有序序列,可以对其中的字符进行索引

字符串序号

索引与切片

获取字符串中一个或多个字符

索引:返回字符串中的单个字符 <字符串>[ ]

Str = "请输入带有符号的温度值:"
print(Str[-2])
# 值

切片:返回字符串中一段字符子串 <字符串>[M: N]

  注意:[M:N] 意为从第**M个到第N-1**个,即左包括右不包括。M默认值为0

Str = "请输入带有符号的温度值:"
print(Str[: -1])
print(Str[0 : -1])
# 请输入带有符号的温度值
# 请输入带有符号的温度值

修改字符串的大小写

字符串首字母大写–title()

name = "ada lovelace"
print(name.title())

'''
Ada Lovelace
'''

小写的字符串ada lovelace存储到了变量name中。在print()语句中,方法
title()出现在这个变量的后面。

方法是Python可对数据执行的操作。

在name.title()中,name后面的.是让Python对变量name执行方法title()中的指定操作。

每个方法后面都跟着一对括号,这是因为方法通常需要额外的信息来完成其工作。而这种信息是在括号内提供的。

函数title()不需要额外的信息,因此它后面的括号是空的。
title()以
首字母大写的方式显示每个单词
,即将每个单词的首字母都改为大写。

这很有用,因为你经常需要将名字视为信息。例如,你可能希望程序将值Ada、ADA和ada视为同一个名字,并将它们都显示为Ada。

字符串全部大小写–upper()、lower()

name = "Ada Lovelace"
print(name.upper())
print(name.lower())

'''
ADA LOVELACE
ada lovelace
'''

存储数据时,方法lower()很有用。很多时候,你无法依靠用户来提供正确的大小写,因此需要将字符串先转换为小写,再存储它们。以后需要显示这些信息时,再将其转换为最合适的大小写方式。

不太理解其应用

合并(拼接)字符串

应用场景:将姓和名存储在不同的变量中,等要显示姓名时再将它们合而为一

first_name = "ada"
last_name = "loveLace"
full_name = first_name + " " + last_name
print(full_name)
print(full_name.title())
'''
ada loveLace
Ada Lovelace
'''

  Python使用加号(+)来合并字符串

  这种合并字符串的方法称为拼接。通过拼接,可使用存储在变量中的信息来创建完整的消息。

使用制表符或换行符来添加空白

  在编程中,空白泛指任何非打印字符,如空格制表符\t换行符\n。你可使用空白来组织输出,以使其更易读。

字符串\n\t让Python换到下一行,并在下一行开头添加一个制表符。

print("Languages:\nPython\t\nJava\tJavaScript")
print("=================")
print("Languages:\nPython\n\tJava\tJavaScript")
'''
Languages:
Python  
Java    JavaScript
=================
Languages:
Python
        Java    JavaScript
'''

使用函数str()避免类型错误

age = 22
message = "Happy " + age + "rd Birthday!"
print(message)
'''
Traceback (most recent call last):
  File "xx.py", line 2, in <module>
    message = "Happy" + age + "rd Birthday!"
TypeError: can only concatenate str (not "int") to str
Python解释器发现你使用了一个值为整数(int)的变量,而整数不能直接和字符串连接,所以报错
'''

为此,可调用函数str(),它让Python将非字符串值表示为字符串

age = 23
message = "Happy" , str(age) + "rd Birthday!"
print(message)

删除空白

应用:在实际程序中,这些剥除函数最常用于在存储用户输入前对其进行清理。

  在程序中,额外的空白可能令人迷惑。对程序员来说,pythonpython看起来几乎没什么两样,但对程序来说,它们却是两个不同的字符串。Python能够发现````python ```中额外的空白,并认为它是有意义的——除非你告诉它不是这样的。
  空白很重要,因为你经常需要比较两个字符串是否相同。例如,一个重要的示例是,在用户登录网站时检查其用户名。但在一些简单得多的情形下,额外的空格也可能令人迷惑。所幸在Python中,删除用户输入的数据中的多余的空白易如反掌。
  Python能够找出字符串开头和末尾多余的空白。

# 使用方法rstrip(), 删除字符串末尾空白
>>> favorite_language = 'python '
>>> favorite_language
'python '
>>> favorite_language.rstrip()
'python'
>>> favorite_language                       
'python '

# 使用方法lstrip(), 删除字符串末尾空白
>>> favorite_language = ' python'
>>> favorite_language
' python'
>>> favorite_language.lstrip()
'python'
>>> favorite_language                        
' python'

# 使用方法strip(), 删除字符串首尾空白
>>> favorite_language = ' python '
>>> favorite_language
' python '
>>> favorite_language.strip()
'python'
>>> favorite_language                         
' python '

从代码行71625可知,方法rstrip()、lstrip()、strip()都是暂时性删除空格

要永久删除这个字符串中的空白,必须将删除操作的结果存回到变量中:

>>> favorite_language = "   python"
>>> favorite_language = favorite_language.lstrip()
>>> favorite_language
'python'

在编程中,经常需要修改变量的值,再将新值存回到原来的变量中。

这就是变量的值可能随程序的运行或用户输入数据而发生变化的原因。

这篇文章里提到的去除空格的方法在处理word时很有用:python剔除空格\u3000 - 知乎 (zhihu.com)

字符串的编码问题

我们都知道计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),0 - 255被用来表示大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母 A 的编码是 65,小写字母 z 的编码是 122。

如果要表示中文,显然一个字节是不够的,至少需要两个字节,而且还不能和 ASCII 编码冲突,所以,中国制定了 GB2312 编码,用来把中文编进去。

类似的,日文和韩文等其他语言也有这个问题。为了统一所有文字的编码,Unicode 应运而生。Unicode 把所有语言都统一到一套编码里,这样就不会再有乱码问题了。

Unicode 通常用两个字节表示一个字符,原有的英文编码从单字节变成双字节,只需要把高字节全部填为 0 就可以。

因为 Python 的诞生比 Unicode 标准发布的时间还要早,所以最早的Python 只支持 ASCII 编码,普通的字符串 ‘ABC’ 在 Python 内部都是 ASCII 编码的。

Python 在后来添加了对 Unicode 的支持,以 Unicode 表示的字符串用u'...'表示。

不过在最新的 Python 3 版本中,字符串是以 Unicode 编码的,也就是说,Python 的字符串支持多语言。就像上面的例子一样,我的代码中没有加u'...',也能正常显示。

不过由于 Python 源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为 UTF-8 编码。当Python 解释器读取源代码时,为了让它按 UTF-8 编码读取,我们通常在文件开头写上这两行:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

第一行注释是为了告诉 Linux/OS X 系统,这是一个 Python 可执行程序,Windows 系统会忽略这个注释;

第二行注释是为了告诉 Python 解释器,按照 UTF-8 编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。

申明了 UTF-8 编码并不意味着你的 .py 文件就是 UTF-8 编码的,必须并且要确保文本编辑器正在使用UTF-8 without BOM编码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值