Python字符串中的引号和空格
嗨,来一串?
从一道题开始
听我给你讲一个Python字符串的故事。
首先,我们来看一段代码:
∙
∙
∙
a = ('adfafa','addfdedf' 'abbbbbeadf')print(min(a))# 输出结果为:addfdedfabbbbbeadf
输出结果是不是和你想的一样呢?
有没有人能解释下,为什么会是这样的结果呢?
如果能,那就不用浪费时间看下文了。
如果不能,那就跟着我一起来学习下字符串的知识。
∙
∙
∙
∙
s = 'hello world' # 单引号s = "hello world" # 双引号s = '''hello world''' # 三单引号s = """hello world""" # 三双引号
我们知道在Python中,字符串必须是由一对单引号或双引号或三引号包裹起来的。
那么,像'addfdedf' 'abbbbeadf'这样的写法,Python是怎么识别它的呢?
换句话说,Python是如何判断一个string的呢?
思路方法
「第一步:查开始标识符」
1.如果首位不是标识符:
a.那就看是否是空格,如果不是空格,那就直接报语法错;
b.如果是,那就忽略不计,继续挨着往下检查,循环第一步,直至遇到第一个标识符,也就
是开始标识符,才可以进入到第二步;
「第二步:确认开始标识符的类型,并查相应配对的结束标识符」
1.如果首位是标识符:
a.这里还要判断是单引号,还是双引号;这一步的意义在于告诉计算机在接下来的查中,要依照什么模样来寻匹配的那个结束标识符,这一点非常重要。
b.接着再看连续出现几个单引号或双引号;
i.也就是再接着看第二位是否还是单引号或双引号:
A.如果是,那就接着看第三位是否还是单引号或双引号;
I.如果是,好了,这就被默认为三引号方式(可以允许中间存在换行符显示为多行的那种),那就直接去负责结束的另外一组三引号。
1.到了,好的,他们包裹的中间这一部分就是一个string。再从这里开始重新回到第一步起点1,开始新的一轮查判断。直到检查完圆括号里最后一个字节符号。
a.在标识符之前之后遇到的空格, 都将被直接忽略。逗号将被认为是分隔新string的标志,并且不允许出现连续的逗号,否则就会报语法错误,如果打印的话,逗号默认被替换成一个空格作为间隔。
b.如果碰巧接下来三个正好就是三引号,那就等于它们什么都没包裹,也就不占任何空间,所以连续6个单引号或双引号,也同样会被忽略不计。
2.没到,好吧,被耍了,报错: EOL-while scanning string literal.(按Ctrl+C强制结束)
II.如果不是,那之前的两个引号就被忽略不计,再从这里开始重新回到第一步起点1,开始新的一轮查判断。
B.如果不是,那就挨着去负责标识结束的另外一个单引号或双引号。
I.到了,好的,他们包裹的中间这一部分就是一个string。再从这里开始重新回到第一步起点1,开始新的一轮查判断。
II.没到,好吧,被耍了,报错: EOL-while scanning string literal.
「第三步:始终检查语法,直至最后一个字节符号」
o这里面其实还要检查转义字符、格式符等,但为了更清晰地看清思路方法,被我略去了,有兴趣的话可以自行补充。
动手检验
怎么样,看明白了吗?
接下来,我出几道题,你可以上手敲一敲,检查一下学习效果。
∙
∙
∙
∙
∙
∙
∙
空格字符串是什么∙
∙
∙
∙
∙
∙
∙
∙
∙
∙
# print('dfafadfa''''''''' '''''''x')# print('a'''''' b ''''''''''c')# print("''''''''''")# print('""""""""')# print("""""""")# print(""""""""""""""""""")# print(r"cccc:/\fdj")# print(r'"a''''''''' b '''''''c'"')# print(r'"a')# print('''abc''''d','e')# print('''abc''''d',,'','e',' f')# print('''abc''''d ' , '','e',' f')# print('a',)# print('abc")# print( "abc")# print('a''b''c')# print('a' 'b' 'c')
怎么样,都做对了吗?如果还有不明白的地方,可以留言给我。
小结
1.字符串是可迭代对象。
2.字符串标识符必须成对出现;标识符前后的空格都将被忽略不计。
3.逗号作为间隔,只能是单个出现,打印时默认为一个空格。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论