python字符串is、==比较区别,以及用于多进程时的坑

前言

之前没有区分过is和==,今天多进程遇到一个bug,单进程没问题,经过一番盘查发现竟然是判断字符串方式出了问题,触及了知识盲区,记录一下。

is,==,cmp的区别

is

python中的 is 用来判断是否是同一个对象,也就是说is是来判断两个变量的地址引用是否相同,相同的话返回true,表示这两个变量的内存ID是相同的(查内存地址用 id() ),不相同的话返回false。单进程的时候几乎没影响,is也能判断字符串的一致

def cmp_string(s1):
    print(s1 is'abc')

if __name__ == '__main__':
    x = 'abc'
    cmp_string(x)

结果为:

True

Process finished with exit code 0

==

python中的‘==’ 是用来判断两个对象的值是否相等的,比如判断两个数字的值是否相等。判断的是内存块里存的值。

def cmp_string(s1):
    print(s1 == 'abc')

if __name__ == '__main__':
    x = 'abc'
    cmp_string(x)

结果为:

True

Process finished with exit code 0

cmp

cmp() 函数则是相当于判断符,比如‘<’, ‘==’,‘>’ 符号,注意python3版本中这个函数被去掉了!

多进程中的小bug

多进程中如果用is就会出错

from multiprocessing import Pool

def cmp_string(s1):
    print(s1 is 'abc')

if __name__ == '__main__':
    p = Pool(12)
    x = 'abc'
    for i in range(2):
        res = p.apply_async(cmp_string, args=(x,))
        res.get()
    print('子进程开始...')
    p.close()
    p.join()
    print('所有子进程结束!')

结果为:

False
False
子进程开始...
所有子进程结束!

Process finished with exit code 0

注意,这里有多进程输入参数和获取错误信息的小技巧,可以参考这篇文章

因此还是尽量使用运算符==。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值