zoukankan      html  css  js  c++  java
  • python笔记

    今天写代码遇到下面的情况,ext_name是文件的扩展名,我想判断它是不是'.v'或者'.V',就写成了下面的:
    if ext_name is not ('.v' or '.V'):
    然后出错了,经过翻书才知道对于or这种短路操作符,只要第一个表达式不是false,整个a or b返回的值就是a的值,否则就是b的值。对于and也是一样,只要a不是false,a and b返回的就是b的值。
    下列情况在python眼中都是false(假的):
    False:标准值False
    None:标准值None
    0:所有类型的0(包括浮点数,长整型和其它类型)
    "":空字符串
    ():空元组
    []:空列表
    {}:空字典
    (注意:包含一个None元素的列表不是空的!)
    其余一切都是真的。
    所以
    if ext_name is not ('.v' or '.V'):
    等同于:
    if ext_name is not '.v':
    按说这样应该没错啊,明明ext_name 的值就是'.v',为什么ext_name is not '.v'的值还是true呢,原来is和is not都是对对象身份的比较,ext_name是由下面的语句得到的:
    ext_name=os.path.splitext(file_name)[1]
    它的类型是<type 'unicode'>是一个unicode对象,而'.v'的类型是<type 'str'>,是一个字符串对象,所以它们不是同一个对象(注意:在python3中,所有字符串都是unicode)。
    如果两者都是字符串对象,只要两者的值相同,就是同一个对象了。
    >>> a='a'
    >>> a is 'a'
    True
    另外还注意到一个细节,在C++中,这种写法是正确的:
    a=(b=3);
    因为b=3虽然是一个赋值语句,但是有值的,它的值就是3,而在python中,这种写法是错误的,b=3没有值。
     




  • 相关阅读:
    几个基本trick
    CSP2019 树上的树 口胡
    To do List
    对代码风格的探索(持续更新)
    我回来了。
    年度悲剧
    最短路
    平衡树
    线段树-模板
    jmeter断言之JSON Assertion
  • 原文地址:https://www.cnblogs.com/tshell/p/2991347.html
Copyright © 2011-2022 走看看