1、range和xrange:http://ciniao.legu.cc/article.php?id=17
大白话:
range直接就生成一个list,把内存给占上了。
xrange像一个管家,用的时候返回1个值,不用的时候也不占地方。
对于程序设计者来说,两者没什么区别。但对于程序和运行程序的机器来说,xrange省内存。
python3没有xrange,但是python3的range == python2的xrange.
2、循环中的break和continue:
break表示跳出当前循环并终止。
continue表示跳出当前循环,然后继续进入循环。
3、循环中的else
如果while或者for循环是正常结束的(没有被break或者return终止),那么则执行else语句块。这一点与if…else不同,需要注意。
4、函数注释:
def function():
'doc_string'
函数的第1行一般写个string,用于函数注释。可以用fountion.__doc__
查看函数注释。如果使用#或者3引号来写注释,就无法用命令查看了。
养成好习惯!
5、函数的关键字参数:
def f(x, y):
if y:
print x
else:
print y
f(1, True)
f(y = False, x = 2)
f(3, y = True)
f(y = False, 4)
f(a = 5, b = True)
f(x = 6, True)
f(False, x = 7)
运行结果:
可以看到:
- 如果所有参数都是关键字参数,并且关键字正确,那么顺序无所谓。
- 如果只写部分的关键字参数,并且符合位置顺序,并且关键字参数排在后面,那么函数可以正常运行。
- 但如果只写部分的关键字参数,关键字不对,或者关键字参数放到了前面,或者关键字位置不对,则程序报错。
6、lambda函数(匿名函数)
还使用上面的f()
,得出下面的代码:
f1 = lambda a, b, c: a(b, c)
f1(f, 10, True)
运行结果是 10
用起来比较麻烦。
7、递归:在函数中再调用自身。效率很低。
def fib(n):
if n == 0 or n == 1:
return n
else:
return (fib(n - 1) + fib(n - 2))
fib(10)
的结果是55,fib(100)
就死掉了~~
8、is
和==
的区别:
http://stackoverflow.com/questions/132988/is-there-a-difference-between-and-is-in-python
==
仅比较value,is
比较是否是同一个object
9、type()和isinstance()的区别:
http://www.jb51.net/article/54275.htm
class A:
pass
class B(A):
pass
isinstance(A(), A) # returns True
type(A()) == A # returns True
isinstance(B(), A) # returns True
type(B()) == A # returns False
以后判断类型最好用instance(),因为它可以正确判断子类