python 2.1*

那么对于条件语句中的condition什么时候为真什么时候为假呢?

在C++/Java等高级语言中,如果条件的值为0或者引用的对象为空指针,那么该条件即为False。

在Python中如果condition为 '',(),[],{},None,set()那么该条件为Flase,否则为True。

下面为Python的测试语句:

1.针对字符串的测试

[python]  view plain  copy
  1. >>> condition=''  
  2. >>> if condition :
        print('True')
    else :
        print('false')
     
  3. False  
  4. >>> condition='test'  
  5. >>> if condition :
        print('True')
    else :
        print('false')
  6. True  
2.针对原组的测试

[python]  view plain  copy
  1. >>> condition=()  
  2. >>> if condition :
        print('True')
    else :
        print('false')
  3. False  
  4. >>> condition=(1,2)  
  5. >>> if condition :
        print('True')
    else :
        print('false')
  6. True  
3.针对列表的测试

[python]  view plain  copy
  1. >>> condition=[]  
  2. >>> if condition :
        print('True')
    else :
        print('false')
  3. False  
  4. >>> condition=['a','b']  
  5. >>> if condition :
        print('True')
    else :
        print('false')
  6. True  
4.针对字典的测试

[python]  view plain  copy
  1. >>> condition={}  
  2. >>>if condition :
        print('True')
    else :
        print('false')
  3. False  
  4. >>> condition={'k':'v'}  
  5. >>> if condition :
        print('True')
    else :
        print('false')
  6. True  
5.针对None的测试

[python]  view plain  copy
  1. >>> condition=None  
  2. >>>if condition :
        print('True')
    else :
        print('false')
  3. False  
6.针对set()的测试

[python]  view plain  copy
  1. >>> condition=set()  
  2. >>> if condition :
        print('True')
    else :
        print('false')
  3. False  
  4. >>> condition.add('a')  
  5. >>> if condition :
        print('True')
    else :
        print('false')
      
  6. True  

----------------------------------------------------------------------------------------------------------------------------------

  1. 开始不理解这段:

    以下假设变量 a 为 10, b为 20: and x and y 布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。 (a and b) 返回 20。

    百度之后得到结论:

    python 中的 and 从左到右计算表达式,若所有值均为真,则返回最后一个值,若存在假,返回第一个假值;

    or 也是从左到有计算表达式,返回第一个为真的值;

    其中数字 0 是假,其他都是真;

    字符 "" 是假,其他都是真;

  2. 一开始输入了

    a = 00111100

    这么个赋值语句被提示了错误,于是去搜了下相关的博客得知 python 中数字有以下的表示方式:

    2 进制是以 0b 开头的: 例如: 0b11 则表示十进制的 3

    8 进制是以 0o 开头的: 例如: 0o11 则表示十进制的 9

    16 进制是以 0x 开头的: 例如: 0x11 则表示十进制的 17

    但是在测试的时候又遇到了个问题,那就是输出来的被自动转化成了十进制:

    >>> a=0b111100
    >>> a
    60

    于是又去找了怎么输出二进制,得到了以下内容:

    分别使用 bin,oct,hex 可输出数字的二进制,八进制,十六进制形式,例如:

    >>> a=0b111100
    >>> a=60
    >>> bin(a)
    '0b111100'
    >>> oct(a)
    '0o74'
    >>> hex(a)
    '0x3c'

    疑问解决!

  3. 刚开始学 python,当想要自增运算的时候很自然的 a++,结果发现编译器是不认识 ++ 的,于是去网上搜了一下,结果发现一篇老外的问答很精彩,涉及到了 python 这个语言的设计原理。

    问题无外乎就是 python 没有自增运算符,自增操作是如何实现的。

    回答中有人介绍了关于自增操作,python 不使用 ++ 的哲学逻辑:编译解析上的简洁与语言本身的简洁,就不具体翻译了。

    后面还有老外回答并附带了一个例子非常的精彩,指出了 python 与 c 语言概念上的一些差异,语言描述的可能未必准确,直接上例子:

    >>> b = 5  
    >>> a = 5  
    >>> id(a)  
    162334512  
    >>> id(b)  
    162334512  
    >>> a is b  
    True  

    可以看出, python 中,变量是以内容为基准而不是像 c 中以变量名为基准,所以只要你的数字内容是5,不管你起什么名字,这个变量的 ID 是相同的,同时也就说明了 python 中一个变量可以以多个名称访问。

    这样的设计逻辑决定了 python 中数字类型的值是不可变的,因为如果如上例,a 和 b 都是 5,当你改变了 a 时,b 也会跟着变,这当然不是我们希望的。

    因此,正确的自增操作应该 a = a + 1 ,当此 a 自增后,通过 id() 观察可知,id 值变化了,即 a 已经是新值的名称。(a += 1之后a,b都会变化,参考深度浅度copy

  4. 纠正一下楼上的一些观点

    楼上的同学所说的在脚本式编程环境中没有问题。但是在交互式环境中,编译器会有一个小整数池的概念,会把(-5,256)间的数预先创建好,而当a和b超过这个范围的时候,两个变量就会指向不同的对象了,因此地址也会不一样,比如下例:

    >>> a=1000
    >>> b=1000
    >>> id(a);id(b)
    2236612366224
    2236617350384
    >>>
  5. 位运算,是自己平时最不熟悉的一块,相信很多人也是这样,但巧妙的运用位运算可以来解决很多题目,例如,剑指offer上面的一道:

    输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

    # -*- coding:utf-8 -*-
    
    class Solution:
        def NumberOf1(self, n):
            # write code here
            cnt = 0
            if n<0:
                n = n & 0xffffffff
            while n:
                cnt+=1
                n = (n-1) & n
            return cnt

    通过按位与,巧妙的计算出二进制中"1"的个数。

  6. is 和 ==

    is 判断两个变量是否是引用同一个内存地址。

    == 判断两个变量是否相等。

    如果不用 a = b 赋值,int 型时,在数值为 -5~256(64位系统)时,两个变量引用的是同一个内存地址,其他的数值就不是同一个内存地址了。

    也就是,a b 在 -5~256(64位系统)时:

    a = 100
    b = 100
    a is b # 返回 True

    其他类型如列表、元祖、字典让 a、b 分别赋值一样的时:

    a is b  # 返回False

猜你喜欢

转载自blog.csdn.net/weixin_41071202/article/details/80221980