python 在线

901Python 条件语句

Python 没有 switch/case 语句,如果遇到很多中情况的时候,写很多的 if/else 不是很好维护,这时可以考虑用字典映射的方法替代:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
def zero():
    return "zero"

def one():
    return "one"

def two():
    return "two"

def num2Str(arg):
    switcher={
        0:zero,
        1:one,
        2:two,
        3:lambda:"three"
    }
    func=switcher.get(arg,lambda:"nothing")
    return func()

if __name__ == '__main__':
    print num2Str(0)

900Python 条件语句

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# 一个简单的条件循环语句实现汉诺塔问题

def my_print(args):
    print args

def move(n, a, b, c):
    my_print ((a, '-->', c)) if n==1 else (move(n-1,a,c,b) or move(1,a,b,c) or move(n-1,b,a,c))

move (3, 'a', 'b', 'c')

899Python 条件语句

python 复合布尔表达式计算采用短路规则,即如果通过前面的部分已经计算出整个表达式的值,则后面的部分不再计算。如下面的代码将正常执行不会报除零错误:

a=0
b=1
if ( a > 0 ) and ( b / a > 2 ):
    print "yes"
else :
    print "no"

而下面的代码就会报错:

a=0
b=1
if ( a > 0 ) or ( b / a > 2 ):
    print "yes"
else :
    print "no"

898Python 运算符

is 与 == 区别 :

is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。

a is b 相当于 id(a)==id(b)id() 能够获取对象的内存地址。

如果 a=10;b=a; 则此时 a 和 b 的内存地址一样的;

但当 a=[1,2,3]; 另 b=a[:] 时,虽然 a 和 b 的值一样,但内存地址不一样。

如果此时定义 a=10、b=10, 然后再对比 a is b 会发现返回的结果是 True,这是因为在 Python 中会实现创建一个小型的整形池,范围为 [-5,256],为这些整形开辟好内存空间,当代码中定义该范围内的整形时,不会再重新分配内存地址。而我在 Pycharm 中进行测试:

#coding=utf-8
a=100000000000;
b=100000000000;
print a is b

结果:

True

后来查了资料才发现是:Python出于对性能的考虑,但凡是不可变对象,在同一个代码块中的对象,只有是值相同的对象,就不会重复创建,而是直接引用已经存在的对象。

897Python 运算符

自上而下,优先级逐步提高

运算符描述
lambdaLambda 表达式(优先级最低)
or布尔“或”
and布尔“与”
not x布尔“非”
in,not in成员测试
is,is not同一性测试
<,<=,>,>=,!=,==比较
|按位或
^按位异或
&按位与
<<,>>移位
+,-加法与减法
*,/,%乘法、除法与取余
+x,-x正负号
~x按位翻转
**指数
x.attribute属性参考
x[index]下标
x[index:index]寻址段
f(arguments...)函数调用
(experession,...)绑定或元组显示
[expression,...]列表显示
{key:datum,...}字典显示
'expression,...'(优先级最高)字符串转换