if name ==‘main’
一个 Python 源码文件除了可以被直接运行外,还可以作为模块(也就是库)被导入。不管是导入还是直接运行,最顶层的代码都会被运行(Python 用缩进来区分代码层次)。而实际上在导入的时候,有一部分代码我们是不希望被运行的。
PI = 3.14
def main():
print "PI:", PI
main()
我们在这个文件里边定义了一些常量,然后又写了一个 main 函数来输出定义的常量,最后运行 main 函数就相当于对定义做一遍人工检查,看看值设置的都对不对。然后我们直接执行该文件(python const.py),输出:
PI: 3.14
现在,我们有一个 area.py 文件,用于计算圆的面积,该文件里边需要用到 const.py 文件中的 PI 变量,那么我们从 const.py 中把 PI 变量导入到 area.py 中:
from const import PI
def calc_round_area(radius):
return PI * (radius ** 2)
def main():
print "round area: ", calc_round_area(2)
main()
运行 area.py,输出结果:
PI: 3.14
round area: 12.56
可以看到,const 中的 main 函数也被运行了,实际上我们是不希望它被运行,提供 main 也只是为了对常量定义进行下测试。这时,if name == ‘main’ 就派上了用场。把 const.py 改一下:
PI = 3.14
def main():
print "PI:", PI
if __name__ == "__main__":
main()
然后再运行 area.py,输出如下:
round area: 12.56
再运行下 const.py,输出如下:
PI: 3.14
lambda
def multipliers():
return [lambda x: i*x for i in range(4)]
print [m(2) for m in multipliers()]
输出:
[6, 6, 6, 6]
list
list = ['a','b','c','d','e']
print list[10:]
输出:
[]
python 中/和//的区别
python 2.7
def div1(x, y):
print "%s/%s = %s" % (x,y,x/y)
def div2(x, y):
print "%s//%s = %s" % (x,y,x//y)
div1(5, 2)
div1(5., 2)
div2(5, 2)
div2(5., 2.)
输出:
5/2 = 2
5.0/2 = 2.5
5//2 = 2
5.0//2.0 = 2.0
#######################
aaa=11
b = 11/2
c = 11//2
d = 11./2.
e = 11./2
f = 11.//2.
print(aaa)
print(b)
print(c)
print(d)
print(e)
print(f)
输出:
11
5
5
5.5
5.5
5.0
python3
def div1(x, y):
print ("%s/%s = %s" % (x,y,x/y))
def div2(x, y):
print ("%s//%s = %s" % (x,y,x//y))
div1(5, 2)
div1(5., 2)
div2(5, 2)
div2(5., 2.)
输出:
5/2 = 2.5
5.0/2 = 2.5
5//2 = 2
5.0//2.0 = 2.0
aaa=11
b = 11/2
c = 11//2
d = 11./2.
e = 11.//2.
print(aaa)
print(b)
print(c)
print(d)
print(e)
输出:
11
5.5
5
5.5
5.0