那么对于条件语句中的condition什么时候为真什么时候为假呢?
2.针对原组的测试
3.针对列表的测试
4.针对字典的测试
5.针对None的测试
6.针对set()的测试
在C++/Java等高级语言中,如果条件的值为0或者引用的对象为空指针,那么该条件即为False。
在Python中如果condition为 '',(),[],{},None,set()那么该条件为Flase,否则为True。
下面为Python的测试语句:
1.针对字符串的测试
- >>> condition=''
- >>> if condition :
print('True') else : print('false')
- False
- >>> condition='test'
- >>> if condition :
print('True') else : print('false')
- True
- >>> condition=()
- >>> if condition :
print('True') else : print('false')
- False
- >>> condition=(1,2)
- >>> if condition :
print('True') else : print('false')
- True
- >>> condition=[]
- >>> if condition :
print('True') else : print('false')
- False
- >>> condition=['a','b']
- >>> if condition :
print('True') else : print('false')
- True
- >>> condition={}
- >>>if condition :
print('True') else : print('false')
- False
- >>> condition={'k':'v'}
- >>> if condition :
print('True') else : print('false')
- True
- >>> condition=None
- >>>if condition :
print('True') else : print('false')
- False
- >>> condition=set()
- >>> if condition :
print('True') else : print('false')
- False
- >>> condition.add('a')
- >>> if condition :
print('True') else : print('false')
- True
----------------------------------------------------------------------------------------------------------------------------------
开始不理解这段:
百度之后得到结论:
python 中的 and 从左到右计算表达式,若所有值均为真,则返回最后一个值,若存在假,返回第一个假值;
or 也是从左到有计算表达式,返回第一个为真的值;
其中数字 0 是假,其他都是真;
字符 "" 是假,其他都是真;
一开始输入了
这么个赋值语句被提示了错误,于是去搜了下相关的博客得知 python 中数字有以下的表示方式:
2 进制是以 0b 开头的: 例如: 0b11 则表示十进制的 3
8 进制是以 0o 开头的: 例如: 0o11 则表示十进制的 9
16 进制是以 0x 开头的: 例如: 0x11 则表示十进制的 17
但是在测试的时候又遇到了个问题,那就是输出来的被自动转化成了十进制:
于是又去找了怎么输出二进制,得到了以下内容:
分别使用 bin,oct,hex 可输出数字的二进制,八进制,十六进制形式,例如:
疑问解决!
刚开始学 python,当想要自增运算的时候很自然的 a++,结果发现编译器是不认识 ++ 的,于是去网上搜了一下,结果发现一篇老外的问答很精彩,涉及到了 python 这个语言的设计原理。
问题无外乎就是 python 没有自增运算符,自增操作是如何实现的。
回答中有人介绍了关于自增操作,python 不使用 ++ 的哲学逻辑:编译解析上的简洁与语言本身的简洁,就不具体翻译了。
后面还有老外回答并附带了一个例子非常的精彩,指出了 python 与 c 语言概念上的一些差异,语言描述的可能未必准确,直接上例子:
可以看出, python 中,变量是以内容为基准而不是像 c 中以变量名为基准,所以只要你的数字内容是5,不管你起什么名字,这个变量的 ID 是相同的,同时也就说明了 python 中一个变量可以以多个名称访问。
这样的设计逻辑决定了 python 中数字类型的值是不可变的,因为如果如上例,a 和 b 都是 5,当你改变了 a 时,b 也会跟着变,这当然不是我们希望的。
因此,正确的自增操作应该 a = a + 1 ,当此 a 自增后,通过 id() 观察可知,id 值变化了,即 a 已经是新值的名称。(a += 1之后a,b都会变化,参考深度浅度copy)
纠正一下楼上的一些观点
楼上的同学所说的在脚本式编程环境中没有问题。但是在交互式环境中,编译器会有一个小整数池的概念,会把(-5,256)间的数预先创建好,而当a和b超过这个范围的时候,两个变量就会指向不同的对象了,因此地址也会不一样,比如下例:
位运算,是自己平时最不熟悉的一块,相信很多人也是这样,但巧妙的运用位运算可以来解决很多题目,例如,剑指offer上面的一道:
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
通过按位与,巧妙的计算出二进制中"1"的个数。
is 和 ==
is 判断两个变量是否是引用同一个内存地址。
== 判断两个变量是否相等。
如果不用 a = b 赋值,int 型时,在数值为 -5~256(64位系统)时,两个变量引用的是同一个内存地址,其他的数值就不是同一个内存地址了。
也就是,a b 在 -5~256(64位系统)时:
其他类型如列表、元祖、字典让 a、b 分别赋值一样的时: