分享

Python字符串中的引号和空格

 喵喵咪吖的书房 2020-06-27

嗨,来一串?

   

从一道题开始

    听我给你讲一个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. 如果首位不是标识符:
    1. 那就看是否是空格,如果不是空格,那就直接报语法错;
    2. 如果是,那就忽略不计,继续挨着往下检查,循环第一步,直至遇到第一个标识符,也就是开始标识符,才可以进入到第二步;

「第二步:确认开始标识符的类型,并查找相应配对的结束标识符」

  1. 如果首位是标识符:
    1. 这里还要判断是单引号,还是双引号;这一步的意义在于告诉计算机在接下来的查找中,要依照什么模样来寻找匹配的那个结束标识符,这一点非常重要。
    2. 接着再看连续出现几个单引号或双引号;
      1. 也就是再接着看第二位是否还是单引号或双引号:
        1. 如果是,那就接着看第三位是否还是单引号或双引号;
          1. 如果是,好了,这就被默认为三引号方式(可以允许中间存在换行符显示为多行的那种),那就直接去找负责结束的另外一组三引号。
            1. 找到了,好的,他们包裹的中间这一部分就是一个string。再从这里开始重新回到第一步起点1,开始新的一轮查找判断。直到检查完圆括号里最后一个字节符号。
              1. 在标识符之前之后遇到的空格, 都将被直接忽略。逗号将被认为是分隔新string的标志,并且不允许出现连续的逗号,否则就会报语法错误,如果打印的话,逗号默认被替换成一个空格作为间隔。
              2. 如果碰巧接下来三个正好就是三引号,那就等于它们什么都没包裹,也就不占任何空间,所以连续6个单引号或双引号,也同样会被忽略不计。
            2. 没找到,好吧,被耍了,报错: EOL-while scanning string literal.(按Ctrl+C强制结束)
          2. 如果不是,那之前的两个引号就被忽略不计,再从这里开始重新回到第一步起点1,开始新的一轮查找判断。
        2. 如果不是,那就挨着去找负责标识结束的另外一个单引号或双引号。
          1. 找到了,好的,他们包裹的中间这一部分就是一个string。再从这里开始重新回到第一步起点1,开始新的一轮查找判断。
          2. 没找到,好吧,被耍了,报错: EOL-while scanning string literal.

第三步:始终检查语法,直至最后一个字节符号

  • 这里面其实还要检查转义字符、格式符等,但为了更清晰地看清思路方法,被我略去了,有兴趣的话可以自行补充。

动手检验

    怎么样,看明白了吗?

    接下来,我出几道题,你可以上手敲一敲,检查一下学习效果。

  •  

  •  

  •  

  •  

  •  

  •  

  •  

  •  

  •  

  •  

  •  

  •  

  •  

  •  

  •  

  •  

  •  

# 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. 逗号作为间隔,只能是单个出现,打印时默认为一个空格。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多