当前位置: 首页 > 面试题库 >

Python字符串实习

姚新霁
2023-03-14
问题内容

管这个问题在实际中没有任何实际用途,但我对Python如何进行字符串实习感到好奇。我注意到以下内容。

>> "string" is "string"
>> True
> 

这是我所期望的。

您也可以这样做。

>> "strin"+"g" is "string"
>> True
> 

那真是太聪明了!

但是你不能这样做。

>> s1 = "strin"
>> s2 = "string"
>> s1+"g" is s2
>> False

Python为什么不评估s1+"g",并意识到它s1与指向相同的地址相同?最后一个块到底在做什么False呢?


问题答案:

这是特定于实现的,但是你的解释器可能是内部编译时常量,而不是运行时表达式的结果。

接下来,我使用CPython 2.7.3。

在第二个示例中,表达式"strin"+"g"在编译时求值,并替换为"string"。这使得前两个示例的行为相同。

如果我们检查字节码,我们会发现它们完全相同:

  # s1 = "string"
  2           0 LOAD_CONST               1 ('string')
              3 STORE_FAST               0 (s1)

  # s2 = "strin" + "g"
  3           6 LOAD_CONST               4 ('string')
              9 STORE_FAST               1 (s2)

第三个示例涉及运行时串联,其结果不会自动中断:

  # s3a = "strin"
  # s3 = s3a + "g"
  4          12 LOAD_CONST               2 ('strin')
             15 STORE_FAST               2 (s3a)

  5          18 LOAD_FAST                2 (s3a)
             21 LOAD_CONST               3 ('g')
             24 BINARY_ADD          
             25 STORE_FAST               3 (s3)
             28 LOAD_CONST               0 (None)
             31 RETURN_VALUE        

如果要手动intern()执行第三个表达式的结果,则将获得与以前相同的对象:

>>> s3a = "strin"
>>> s3 = s3a + "g"
>>> s3 is "string"
False
>>> intern(s3) is "string"
True


 类似资料:
  • 问题内容: 为什么Python仅内置字符串?应该可以扩展到可哈希和可比较的类,对吗? 问题答案: 内联事物的目的是能够通过比较它们的内存地址来进行比较。您要确保永远不要创建两个具有相同值的对象(当程序请求创建一个与现有对象具有相同值的第二个对象时,它会收到对先前存在的对象的引用)。这要求你要实习的东西是 不变的 ; 如果一个被拘禁对象的值可以改变,那么按地址比较它们是行不通的。 在Python中,

  • 主要内容:处理字符串中的引号的,字符串的换行,Python长字符串,Python原始字符串若干个字符的集合就是一个 字符串(String)。 Python 中的字符串必须由双引号 或者单引号 包围,具体格式为: "字符串内容" '字符串内容' 字符串的内容可以包含字母、标点、特殊符号、中文、日文等全世界的所有文字。 下面都是合法的字符串: "123789" "123abc" "https://www.xnip.cn/python/" "小牛知识库成立8年了" Python 字符串中的双

  • 问题内容: 这个简单的代码仅尝试用冒号替换分号(在i指定的位置)不起作用: 它给出了错误 如何解决此问题,以冒号代替分号?使用replace不起作用,因为该函数不占用索引-可能有一些我不想替换的分号。 例 在字符串中,我可能有许多分号,例如 我知道我想替换哪些(我在字符串中有索引)。使用替换无法正常工作,因为我无法对其使用索引。 问题答案: python中的字符串是不可变的,因此你不能将它们视为列

  • 问题内容: 我正在使用Beautiful Soup 3解析一些HTML,但是它包含HTML实体,Beautiful Soup 3不会自动为我解码: 如何解码HTML实体text以获得而不是。 问题答案: Python 3.4以上 用途: FYI html.parser.HTMLParser.unescape已弃用,并且应该在3.5中删除,尽管它是错误地保留的。它将很快从语言中删除。 Python

  • 本文向大家介绍Python实现字符串的逆序 C++字符串逆序算法,包括了Python实现字符串的逆序 C++字符串逆序算法的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Python/C++实现字符串逆序的具体代码,供大家参考,具体内容如下 题目描述:将字符串逆序输出 Python实现一: 借助于列表的reverse()函数,需要注意的是,该函数没有返回值,只会让列表原地逆序 借助于

  • 本文向大家介绍Python字符串替换实例分析,包括了Python字符串替换实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python字符串替换的方法。分享给大家供大家参考。具体如下: 单个字符替换 输出结果为:abcd 字符串替换,改善版 输出结果为:hello, i'm mr, hoho~~,hoho~~mrmr 希望本文所述对大家的Python程序设计有所帮助。