is在python中是什么意思_Python 中 "is" 与 "==" 有啥区别?

在 Python 中,比较两个对象(变量)是否相等,可以用 “is” 和 “==” 操作,但它俩有什么区别?什么时候用 “is”,什么时候用 “==” ?在面试时,发现不少候选人很难把这两者完全说清楚,因此在这篇文章中,「Python之禅」将对二者进行深入浅出的对比介绍。

先举个例子

小黄最近手头非常宽裕,花重金购买了一辆 P90D 特斯拉,我们暂且给这车取名叫 "小P" ,这辆车和隔壁老王家的车(车名叫 "小 王")是一模一样的,无论是型号、外表还是价格都一样,是同批次生产的。这里我们可以说 "小P" 和"小王"是两辆一模一样的、相等的(euqal),但本质上这是两个不同的对象。有一天小君给他的爱车又取了一个网名叫 "爱驹",当我们说 "小P" 的时候其实就是在讨论 "爱驹",因为本质上两个名字指的是同一个对象,这里我们把 "小P" 和 "爱驹" 称为完全相等的(identical)。

在 Python 中,”==” 和 “is” 的区别可类比这个例子 ,前者是相等性比较,比较的是两个对象中的值是否相等,后者是一致性比较,比较的是两个对象的内存空间地址是否相同。

​显然,如果内存地址相同,那么他们的值肯定也是一样的,因此,如果 “is” 返回 True,那么 “==” 一定也返回 True,反之却不成立。

talk is cheap, show me the code

先创建一个列表对象,然后给它指定一个名字 a,再定义另外一个变量 b,让它指向同一个对象。

a 和 b 打印的值都是相等的,因为这两个变量指向的是同一个对象,就好比给一辆车起了两个不同的名字。

理所当然, is 和 == 都返回 True。

创建一个新的对象,尽管值是一样的,但是他们本质上是两个不同的对象,处在两个不同的内存空间,因此 "is" 返回的是 False。

有且当仅比较的两个变量指向同一个对象时 "is" 才返回 True,而 "==" 最终取决于对象的__eq__()方法,本质上两个变量进行 "==" 比较操作调用的是对象的__eq__()方法。例如:

因为自定义类 Foo 的 eq 方法恒返回 True,因此它与任何对象进行 "==" 都是返回 True。而它与 None 是两个不同的对象,因此 'is' 操作返回的是 False。

最后请大家思考这段代码,为什么同样的操作会有不同的结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python可以使用正则表达式来提取字符串的单词。可以使用re.findall()函数来实现。例如: ``` import re text = "This is a sentence with several words" words = re.findall(r'\b\w+\b', text) print(words) ``` 输出结果为: ``` ['This', 'is', 'a', 'sentence', 'with', 'several', 'words'] ``` 也可以使用string.split()函数来实现 ``` text = "This is a sentence with several words" words = text.split(' ') print(words) ``` 输出结果为: ``` ['This', 'is', 'a', 'sentence', 'with', 'several', 'words'] ``` ### 回答2: 在Python,可以使用split()函数来提取字符串的单词。split()函数会将字符串按照空格进行分割,并返回一个包含分割后单词的列表。 例如,有一个字符串s = "Hello world! This is a sample string.",我想提取出其的单词。可以使用split()函数来实现: words = s.split() print(words) 运行以上代码,输出结果为:['Hello', 'world!', 'This', 'is', 'a', 'sample', 'string.'] 如果字符串存在其他分隔符,也可以在split()函数指定分隔符。例如,如果字符串s = "Hello-world!This/is/a/sample-string.",我们可以使用split('-')来按照"-"进行分割,并提取出单词: words = s.split('-') print(words) 运行以上代码,输出结果为:['Hello', 'world!This/is/a/sample', 'string.'] 需要注意的是,split()函数默认以空格作为分隔符,如果字符串存在连续的多个空格,则会被视为一个空格进行分割。 另外,如果需要删除字符串的标点符号,可以使用字符串的translate()函数配合使用translate()函数的string.punctuation属性来实现。具体做法是,先导入string模块,然后使用translate()函数替换字符串的标点符号为空格,再利用split()函数来提取单词。例如: import string translator = str.maketrans('', '', string.punctuation) s = "Hello, world! This is a sample string." s = s.translate(translator) words = s.split() print(words) 运行以上代码,输出结果为:['Hello', 'world', 'This', 'is', 'a', 'sample', 'string'] 这样就实现了提取字符串的单词并去除标点符号的功能。 ### 回答3: 要在Python提取字符串的单词,我们可以使用split()函数。split()函数将会把字符串分割成一个个的单词,并返回一个包含所有单词的列表。 例如,假设我们有一个字符串"Hello, how are you?",我们可以使用split()函数提取其的单词,具体代码如下: ``` string = "Hello, how are you?" words = string.split() print(words) ``` 这段代码将会输出以下结果: ``` ['Hello,', 'how', 'are', 'you?'] ``` 可以看到,字符串被成功地分割成了四个单词。 如果字符串有特殊符号或标点符号,我们可以使用正则表达式来去除它们,只提取单词。下面是一个示例代码: ``` import re string = "Hello, how are you?" words = re.findall(r'\b\w+\b', string) print(words) ``` 这段代码使用了re.findall()函数来匹配字符串的所有单词,并返回一个包含所有单词的列表。输出结果与之前的代码相同。 总结来说,Python提取字符串的单词可以使用split()函数或正则表达式,具体方法取决于字符串中是否有特殊符号或标点符号。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值