习题
global
命令用在定义好的函数里面的时候表示后面的变量是全局的,直接用就好,所以不需要提前定义好传入变量的类型
例如
def fibMetered(x):
global numCalls
#这里就认为numCalls已经
#是某个前面用过的环境里已有的全局变量了
numCalls += 1
if x == 0 or x == 1:
return 1
else:
return fibMetered(x-1) + fibMetered(x-2)
def testFib(n):
global numCalls
for i in range(n+1):
numCalls = 0
print('fib of ' + str(i) + ' = ' + str(fibMetered(i)))
print ('fib called ' + str(numCalls) + ' times')
testFib(10)
结果如下
fib of 0 = 1
fib called 1 times
fib of 1 = 1
…
fib of 9 = 55
fib called 109 times
fib of 10 = 89
fib called 177 times
-
特别注意元组的调用
元组是不可变的数据结构,如果要切片元组时,就像切片列表一般,但是单元素元组必须保留逗号
(1,)就是一个单元组!! -
逻辑变量无法判断元组里面元素的元素
-
例如
x=((1,2,3),)
-
3 in x
判断语句肯定返回False
-
元组也不支持变化,要注意是这种形式会出错
-
x[0]=3
给刚才我们做例子的元组赋值3,结果出错
TypeError: ‘tuple’ object does not support item assignment
列表
- 列表型变量也无法直接调用里面元素的列表元素
- 例如
x = [1, 2, [3, 'John', 4], 'Hi']
再调用3 in x
会返回False