20161016 Python 读书笔记之函数抽象 参数、作用域
来源:互联网 发布:对冲书籍 知乎 编辑:程序博客网 时间:2024/06/05 20:29
Python读书笔记之函数抽象 参数、作用域
1.斐波那契数列
#ecoding=utf-8fibs = [0,1]for i in range(8): fibs.append(fibs[-2] + fibs[-1])print fibs
2.抽象和结构
#下载网页、计算频率、打印每个单词的频率page = download_page()freqs = compute_frequencies(page)for word,freq in freqs: print wprd,freq
3.记录函数
#如果在函数的开头写下字符串,他就会作为函数的一部分进行存储,这称为文档字符串def square(x): 'Calculates the square of the number x.' return x*xprint square(10)print square.__doc__ #__doc__是函数属性#为什么我们想要修改参数 使用函数改变数据结构是将程序抽象化的好方法storage = {}storage['first'] = {}storage['middle'] = {}storage['last'] = {}#storage这个数据结构的存储方式是带有三个键"first"、"middle"和"last"的字典me = 'Magnus Lie Hetland'storage['first']['Magnus'] = [me]storage['middle']['Lie'] = [me]storage['last']['Hetland'] = [me]print storage
4.默认参数
def hello(name,greeting='Hello',punctuation='!'): print '%s. %s%s' % (greeting,name,punctuation)hello('Mars')hello('Mars','Howdy','...')hello('Mars',punctuation='.')hello('Mars',greeting='Top of the moring to ya')#收集参数def print_params(*params): #这里我们只指定了一个参数,但是前面添加了*号。为什么 print paramsprint_params('Testing') #我们可以看到,结果作为元祖打印出来了。#联合普通参数def print_params_2(title,*params): print title print paramsprint_params_2('params',1,2,3)#处理关键字参数def print_params_3(**params): print paramsprint_params_3(x=1,y=2,z=3) #最后结果以字典的格式输出
5.如何实现多个名字同时存储。
def store(data,*full_names): for full_name in full_names: names = full_name.split() if len(names) == 2 : names.insert(1,'') labels = 'first','middle','last' for label ,name in zip(labels,names): people = lookup(data,label,name) if people: people.append(full_name) else: data[label][name] = [full_name]d = {}print store(d,'luke Skywalker','Anakin Skywalker')
6.反转过程
#对于参数正常工作,只要扩展的部分是最新的就可以了。可以使用同样的技术来处理字典--使用双星运算符。def hello_3(greeting='Hello',name='world'): print '%s, %s!' % (greeting,name)params = {'name':'Sir Robin','greeting':'Well met'}hello_3(**params)#练习使用参数def story(**kwds): return 'once upon a time.there was a ' \ '%(job)s called %(name)s.' % kwdsdef power(x,y,*others): if others: print 'Received redundant parameters:', others return pow(x,y)def interval(start,stop=None,step=1): 'Imitates range() for step > 0' if stop is None: #如果没有为stop提供值。。。。。 start,stop = 0,start #指定参数 result = [] i = start #计算start索引 while i < stop: #直到计算到stop索引 result.append(i) #将索引添加到result内。。。。 i += step #用step(>0)增加索引。。。。 return resultprint story(job = 'king' , name = 'Gumby')print story(name = 'Sir Robin' , job = 'brave knight')params = {'job':'language','name':'Python'}print story(**params)del params['job']print story(job = 'stroke of genius' , **params)print power(2,3)print power(3,2)print power(y=3,x=2)params1 = (5,) * 2print power(*params1)print power(3,3,'Hello,world')print interval(10)print interval(1,5)print interval(3,12,4)print power(*interval(3,7))
7.作用域
#变量可以把它看成值的名字x = 1 #在执行x=1赋值语句后,名称x引用到值1.这就像用字典一样,键引用值scope = vars() #当然,变量和所对应的值是用个“不可见”的字典。print scope['x'] #使用内建的vars函数可以返回这个字典#这类“不可见的字典”叫做命名空间或者作用域#除了全局作用域外,每个函数都会创建一个新的作用域def combine(parameter): print parameter + ' ' + globals()['parameter']parameter = 'berry'combine('Shrub')x = 1def change_global(): global x x = x + 1change_global()print x#函数嵌套def multiplier(factor): def mutiplyByFator(number): return number * factor return multiplierdouble = multiplier(2)print multiplier(2)(3)
8.递归
#两个经典:阶乘和幂def factorial(n): #求阶乘 if n == 1: return 1 else: return n * factorial(n-1)print factorial(4)def power(x,n): #求幂 if n==0: return 1 else: return x * power(x,n-1)print power(3,2) #递归之二元查找def search(sequence,number,lower=0,upper=None): if upper is None : upper = len(sequence) - 1 if lower == upper: assert number == sequence[upper] return upper else: middle = (lower + upper) // 2 if number > sequence[middle]: return search(sequence,number,middle+1,upper) else: return search(sequence,number,lower,middle)seq = [34,67,8,123,4,100,95]seq.sort()print seqprint search(seq,34)print search(seq,100)print search(seq,132)#函数式编程的一些函数: map、filter和reduce下面介绍一下map函数 将序列中的元素全部传给一个函数print map(str,range(10)) # Equivalent to [str(i) for i in range(10)]#上面这条语句与下面这条语句一个意思print [str(x) for x in range(10)]#filter函数可以基于一个返回布尔值的函数对元素进行过滤。def func(x): return x.isalnum()seq = ["foo","x41","?!","***"]print filter(func,seq)#本例中,使用列表推导式可以不专门定义一个函数print [x for x in seq if x.isalnum()]#事实上,还有一个叫做lambda表达式的特性,可以创建短小的函数。print filter(lambda x : x.isalnum() , seq)#使用reduce函数,他能够将序列的前两个元素与给定的函数联合使用,并且将它们的返回值和第三个元素继续联合使用,知道整个序列处理完毕,并且得到一个最终结果。#例如,需要计算一个序列的数字和,可以使用reduce函数加上lambda x,y : x+y(继续使用相同的数字)numbers = [72,101,108,108,111,44,32,119,111,114,108,100,33]print reduce(lambda x,y : x+y, numbers)
0 0
- 20161016 Python 读书笔记之函数抽象 参数、作用域
- 《Python基础教程》读书笔记(1)之第6章抽象(关键词:Python/抽象/函数/参数/作用域)
- Python基础教程--抽象,函数,参数,递归,作用域
- Python抽象之函数
- <Python进阶读书笔记>之(一) 函数不定参数传递
- ES6之块级作用域与函数声明--读书笔记
- Python函数参数传递以及变量作用域
- 深入解析Python中函数的参数与作用域
- 《Python基础教程》学习笔记之[D6]抽象之函数定义,参数
- 《Python基础教程》学习笔记之[D7]抽象之函数定义,参数(一)
- Python之函数-参数
- Python函数中,参数前*的作用
- Python 函数作用域
- python参数和作用域
- C++读书笔记之抽象
- Python学习随笔五:抽象之函数
- python之函数参数传递
- python函数之参数传递
- Wireshark中常见的TCP Info
- 【Derivation】MarkDown Letex编码 之 正态分布特征函数证明
- Spark的算子的分类
- hexo+github pages博客搭建记录
- 流程控制简单知识点以及零碎知识点
- 20161016 Python 读书笔记之函数抽象 参数、作用域
- UVa 540 Team Queue
- 多选框和反选框
- 分区结构分析: linux系统可查看某一磁盘结构,效果类似window的winhex。
- SD卡启动详解
- ListViewTest
- cin对象3种不同模式的单字符输入在while循环中的应用(循环显示,计算总字符数)
- SQLite数据库储存优化
- linux内核中socket的创建过程源码分析(总结性质)