Python基础教程代码与注释P103 6.5 作用域 P105 6.6 递归
2018-01-20 17:12
756 查看
# -*- coding: cp936 -*- #P103 6.5 作用域 # vars函数返回 变量和所对应的值所形成的“不可见”的字典。称为 命名空间 或者 作用域 x = 1; scope = vars() print scope['x'], scope['x'] + 1 # 函数调用时会创建一个新的作用域 def foo(): x = 42 #局部变量 local variable x = 1 #全局变量 foo() #调用foo()函数 x=42只在foo()函数内部作用域(局部命名空间)起作用。 print x #并未改变x的值 # 变量作为参数传入函数中 def output(x): print x x = 1; y = 2 output(y) # 在函数内部直接访问全局变量 def combine(parameter): print parameter + external #引用全局变量易发生错误 external = 'berry' combine('Shrub') # 全局变量与局部变量同名,全局变量将被局部变量屏蔽 def combine(parameter): print parameter + globals()['parameter'] #可以用globals()函数获取全局变量值 parameter = 'berry' #全局变量与局部变量同名 combine('Shrub') # 重绑定 全局变量 x = 1 def change_global(): global x #告知Python这是一个全局变量 x = x + 1 change_global() print x raw_input("Press <enter>")
# -*- coding: cp936 -*- #P105 6.6 递归 #6.6.1 两个经典:阶乘和幂 # 阶乘递归 def factorial(n): result = n for i in range(1, n): result *= i return result print factorial(5) def factorial_re(n): if n == 1: return 1 else: return n * factorial_re(n-1)#递归调用 print factorial_re(5) # 幂递归 def power(x, n): result = 1 for i in range(n): result *= x return result print power(2, 3) def power_re(x, n): if n == 0: return 1 else: return x * power_re(x, n-1) #递归调用 print power_re(2, 3) #6.6.2 另外一个经典:二分法查找 # 查找100内的一个数 def search(sequence, number, lower = 0, upper = None): #将限制设为可选 if upper is None: #如果上限为空,即未设置上限 upper = len(sequence) - 1 #则上限的位置为 sequence的长度-1,即最后一个元素的索引 if lower == upper:#assert断言,条件为真,程序工作 #如果上下限相同,那么就是数字所在位置 assert number == sequence[upper] #条件为真时,才返回 return upper #返回上限数字 else: middle = (lower + upper) // 2 #否则找到两者的中点,查找数字是在左侧还是在右侧 if number > sequence[middle]: #若查找的数字在sequence的右侧(即下半部分) return search(sequence, number, middle + 1, upper) #刚继续查找数字所在的下半部分 else: #若查找的数字在sequence的左侧(即上半部分) return search(sequence, number, lower, middle) #刚 4000 继续查找数字所在的上半部分 #seq = [34, 67, 8, 123, 4, 100, 95] seq = range(100, 0, -2) seq.sort() print seq print search(seq, 34) print search(seq, 100) # 函数式编程 map、filter、reduce(Python 3.0中被移至 functools 模块中 # map函数可以将序列中的元素全部传递给一个函数 print map(str, range(10)) # filter函数返回其函数为真的元素的列表,可以基于一个返回布尔值的函数对元素进行过滤 def func(x): return x.isalnum() #isalnum字符串方法:检查字符串是否由字母或数字字符组成 seq = ["foo", "x41", "?!", "***"] print filter(func, seq) print [x for x in seq if x.isalnum()] #用列表推导式 filter(lambda x: x.isalnum(), seq) #用lambda 创建短小的函数 # reduce函数将序列的前2个元素与给定的函数联合使用,返回值和第3个元素继续联合使用.... numbers = [72, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100, 33] print reduce(lambda x, y: x+y, numbers) print sum(numbers) raw_input("Press <enter>")
相关文章推荐
- Python基础教程代码与注释P77 5.5 循环
- Python基础教程代码与注释P44 3.1 基本字符串操作 3.2 字符串格式化:精简版
- Python基础教程代码与注释P92 6.4 参数魔法
- Python基础教程代码与注释P82 5.6 列表推导式——轻量级循环
- Python基础教程代码与注释P55 4.1 字典的使用 4.2.1 dict函数 4.2.3 字典的格式化字符串 4.2.3 字典的格式化字符串
- Python基础教程代码与注释P34 2.3 列表 2.3.1 list函数 2.3.2 基本的列表操作
- Python基础教程代码与注释P65 5.1 print和import的更多信息
- Python基础教程代码与注释helloworld
- Python基础教程代码与注释P46 3.3 字符串格式化:完整版 3.4 字符串方法
- Python基础教程代码与注释P69 5.4 条件和条件语句
- 使用70行Python代码实现一个递归下降解析器的教程
- Python基础教程代码与注释P36 2.3 列表 2.3.3 列表方法
- 【教程】记录:python基础爬虫代码(下载妹子福利图片)
- Python基础教程代码与注释P41 2.4 元组:不可变序列
- Python Flask基础教程示例代码
- Python基础教程代码与注释P89 6.1 懒惰即美德 P90 6.3 创建函数
- Python基础教程----迭代器和生成器,递归,八皇后(2)
- Python基础(二、代码调试方式dir,help,print函数,pycharm破解教程)
- Python基础教程--抽象,函数,参数,递归,作用域
- python 基础代码注释和时间属性