python笔记之控制语句

这里主要介绍下python中的真值测试的内容和if、while以及for的格式。
1. 真值测试,内置函数bool()可以用来测试对象或者表达式的真假。
1) 任何非零数字或非空对象都为真。
>>> bool(1)
True
>>> s="abc"
>>> bool(s)
True
>>> l=[1,2,3,4]
>>> bool(l)
True

2) 数字零、空对象以及特殊对象None都被认为是假。
>>> bool(0)
False
>>> s=""
>>> bool(s)
False
>>> l=[]
>>> bool(l)
False
>>> bool(None)
False

3) 比较和相等测试会返回True或False(1和0的特殊版本)。
>>> 1 == 1
True
>>> 1 == 2
False
>>> 1 > 2
False
>>> 1 < 2
True
>>> "a" == "a"
True
>>> "a" == "b"
False
>>> "a" > "b"
False
>>> "a" < "b"
True

这里顺便介绍下==和is的区别(对应的“不等”和“不是”分别为!=和is not):==是比较两个对象的内容是否相同,而is则是测试两个对象的内存地址是否相同。(查看对象的内存地址可使用内置函数id()。)下面的例子中,a和b为两个内容相同的字符串,如果没有空格的时候,a、b都是其引用;而其中若有字符串的话会放到两个不同的内存地址中。至于原因目前不是很清楚,应该和python内存池的机制有关。
>>> a = "hello"
>>> b = "hello"
>>> a == b
True
>>> a is b
True
>>> a = "hello world"
>>> b = "hello world"
>>> a == b
True
>>> a is b
False


4) 逻辑操作符 and和or为短路逻辑,会返回决定其结果的对象,而not总是返回True或Fasle。

>>> 2 and 3
3
>>> 0 and 2
0
>>> 2 or 3
2
>>> 3 or 2
3
>>> not 2
False
这里解释以下什么是决定其结果的对象:
x and y,如果x为真,那么这个表达式的值就是由y决定的,所以不管y为真为假,都返回y;如果x为假的话,x就已经决定了这个表达式的值,所以返回x。
X or y就和x and y刚好相反,x为真的话表达式就为真,所以返回x;x为假的话就需要去判断y的值了,此时表达式的值就是由y决定的,所以返回y。

5)成员操作符in/not in,用来测试序列(字符串)或者集合类数据(元组、列表、字典)的成员关系,需要注意的就是字典中只是测试字典的键,相当于在字典键组成的列表中测试。in使用的是线性搜索。注意for语句中的in不是用来测试的,而是类似的循环赋值。

2. if
if <test1>:
    <statements1>
elif <test2>:
    <statements2>
else:
    <statements3>
if中的多个条件组合用and或or来连接,非当然就是not了。
三元表达式:x=y if a>b else z,相当于c语言中的三目运算符,x= a>b?y:z,对应完整的代码为:
if a>b:
    x=y
else:
    x=z
3. while
while <test>:
    <statements1>
else:
    <statements2>
这里的else部分只有在循环离开while并且不是被break终止的时候才会执行,也就说循环正常退出的时候会执行的语句。既然提到了break,就说说python中终止和跳过当前循环的语句:break和continue,这两个语句和c语言中的作用都是相同的,break为终止当前的整个循环,跳过整个循环语句;continue则是跳过本次循环,执行下一次循环语句。比较特殊的是python中还有什么事情都不做只是无运算的占位语句pass,这让我想起了汇编语言里的nop指令。


4. for
for循环是python中一个通用的序列迭代器,可以遍历任何有序的序列对象内的元素。for语句可以用于字符串、元组、列表、其他可迭代对象以及通过类所新建的新对象。
for <target> in <object>:
    <statements1>
else:
    <statements2>
python在运行for循环的时候,会逐个将序列对象的元素赋值给target,然后为每个元素执行循环主体,target相当于序列遍历的游标。这里的in当然就不是测试的意思了。
break、continue、pass以及最后else块都与while中的作用相同。

内置函数range()可以从来产生连续的整数列表,格式为range([start,] stop[, step]),从start开始(默认0),每隔step(默认1)取一个数,直到stop-1,返回所有取到数的列表。
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(0,10,2)
[0, 2, 4, 6, 8]
下面就举个计算1+2+3+...+100的程序:
>>> N = 100
>>> sum = 0
>>> for i in range(N):
...     sum += i+1
...
>>> print sum
5050

内置函数zip()以任意多个序列作为参数,将所有序列按相同的索引组合成一个元素是各个序列合并成的tuple的新序列,新的序列的长度以参数中最短的序列为准。另外(*)操作符与zip函数配合可以实现与zip相反的功能,即将合并的序列拆成多个tuple。
>>> a = range(1,6)
>>> b = range(6,11)
>>> a
[1, 2, 3, 4, 5]
>>> b
[6, 7, 8, 9, 10]
>>> zip(a, b)
[(1, 6), (2, 7), (3, 8), (4, 9), (5, 10)]
>>> zip(*zip(a, b))
[(1, 2, 3, 4, 5), (6, 7, 8, 9, 10)]

可以实现的for循环并行使用多个序列:

>>> for (x, y) in zip(a, b):
...     print x,y
...
1 6
2 7
3 8
4 9
5 10


内置对象enumerate(iterable) 返回可迭代序列中元素位置和值组成的迭代器。

>>> a="123123"
>>> enumerate(a)
<enumerate object at 0x7f0931a3d190>
>>> list(enumerate(a))
[(0, '1'), (1, '2'), (2, '3'), (3, '1'), (4, '2'), (5, '3')]
>>> tuple(enumerate(a))
((0, '1'), (1, '2'), (2, '3'), (3, '1'), (4, '2'), (5, '3'))
>>> dict(enumerate(a))
{0: '1', 1: '2', 2: '3', 3: '1', 4: '2', 5: '3'}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值