python之抽象 2014-4-6
#抽象 8.40am-
1.懒惰即美德
2.抽象和结构
3.创建函数
内建的callable 函数可以判定函数是否可以调用
>>> import math
>>> x=1
>>> y=math.sqrt
>>> callable(x)
False
>>> callable(y)
True
使用def"函数定义"语句
def hello(name):
return 'hello,'+name+'!'
print hello('tom')
>>>
hello,tom!
计算数字是前两个数字之和的数列
def fibs(num):
result=[0,1]
for i in range(num-2):
result.append(result[-2]+result[-1])
return result
print fibs(10)
>>>
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
记录函数 可以加上注释头 .__doc__可以读出来
def square(x):
"calculates the number"
return x*x
print square.__doc__
>>>
calculates the number
help函数 也可以查看注释
print help(square)
Help on function square in module __main__:
square(x)
calculates the number
并非真正函数的函数
def test():
print 'hello'
return #会结束此函数
print 'word'
>>>test()
hello 不会继续往下执行
x=test()
print x 会返回一个None 没有返回值就会返回一个None
4.参数魔法
函数内为参数赋予新值不会改变外部参数
def x(n):
n='a'
m='b'
x(m)
>>>x(m)
b
而列表会变化的 函数重新赋值会操作同一个的列表 建议使用副本
def x(n):
n[0]='a'
m=['b','c']
x(m)
>>>m
['a','c']
输入姓名
def init(data):
data['first']={}
data['middle']={}
data['last']={}
以上初始化语句
storage={}
init(storage)
print storage
>>>
{'middle': {}, 'last': {}, 'first': {}}
def inc(x):return x+1
foo=10
foo=inc(foo)
>>>foo
11
关键字参数和默认值
hello(greeting='hello',name='world')
print '%s,$s!'%(greeting,name)
使用赋值 则不用考虑位置的问题
参数名和值一定要对应这类使用参数名提供的参数叫做关键字参数 可以明确每个参数的作用
store('mr li',10,20,13,4) 这就比较难懂
store(patient='mr li',hour=10,minute=20,day=13,month=5)
这就比较清晰
关键字参数可以给参数提供默认值
hello(name='tom')
>>>hello tom
多个参数,*号表示多个参数
def print_params(*params)
>>>print_params(1,2,3)
(1,2,3)
def print_params(x,y,z=3,*pospar,**keypar):
print x,y,z
print popspar
print keypar
>>>print_params(1,2,3,4,5,6,7,foo=1,bar=2)
123
(5,6,7)
{'foo':1,'bar':2}
>>>print_params(1,2)
1 2 3
()为空
{}为空
反转过程
收集参数
def add(x,y):
return x+y
params=(1,2)
print add(*params)
>>>params={'name':'tom:','age':'18'}
>>>hello(**params)
tom:18
5.作用域
除了全局作用域外 每个函数调用都会创建一个新的作用域
慎用全局变量
如果局部变量与全局变量名相同的话 要访问全局变量怎么办?
全局变量将被全局变量覆盖 要访问的话可以使用
globals()['parameter']parameter是全局与局部同名的变量
将局部变量变为全局变量:global parameter
加上global即可
6.递归
n*(n-1)...*1
def digui(n):
result=n
for i in range(1,n):
result*=i
return result
print digui(5)
>>>
120
以上递归代码等同于
def digui(n):
if n==1:
return 1
else:
return n*digui(n-1)
print digui(5)
>>>
120
乘方:
def power(x,n):
result=1
for i in range(n):
result*=x
return result
乘方用递归:
def power(x,n):
if n==0:
return 1
else:
return x*power(x,n-1)
二元查找
def search(sequence,number,lower,upper):
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)
查找1-100之间的某个数 使用二分法最多只要7次判断
当然也可以使用列表的index 但是 每一个数字都要判断 那就需要100次判断 效率没有那么高
python之抽象 2014-4-6的更多相关文章
- python之抽象基类
抽象基类特点 1.不能够实例化 2.在这个基础的类中设定一些抽象的方法,所有继承这个抽象基类的类必须覆盖这个抽象基类里面的方法 思考 既然python中有鸭子类型,为什么还要使用抽象基类? 一是我们在 ...
- python 接口(抽象) 多态,鸭子类型, 多继承原理(mro)
抽象类与接口类 接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数 ...
- 大话设计模式Python实现- 抽象工厂模式
抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的类 下面是一个抽象工厂的demo: #!/usr/bin/env pyth ...
- 浅谈Python设计模式 - 抽象工厂模式
声明:本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 在上一篇我们对工厂模式中的普通工厂模式有了一定的了解,其实抽象工作就是 表示针对 ...
- 【Beginning Python】抽象(未完)
[懒惰即是美德] 抽象意味着良好的可读性:说明你在努力做什么,而不是给出你正在如何做的细节. [抽象和结构] 程序应该是非常抽象的,就像“下载网页.计算频率.打印每个单词的频率”一样易懂.翻译成程序就 ...
- python基础===抽象
懒惰即美德 斐波那契数列: >>> fibs = [0,1] >>> for i in range(8): fibs.append(fibs[-2]+fibs[-1 ...
- 【Python】抽象工厂模式
前言 接着上一篇的故事工厂模式继续,手机要出厂,显然光一个手机肯定是不行的,还需要包装盒.充电器等等东西.我们按照上一篇提到的工厂模式,去建立新的工厂是一点都没有问题的.但是思考一下这样子做会带来的问 ...
- 一步一步学python(六) - 抽象
1.string转数字 import locale locale . atoi( str ) 2.创建函数 函数是可以调用(可能包含参数),执行某种行为并返回一个值 >>>impo ...
- Python抽象基类之声明协议
抽象基类之--声明协议 上回讲了Python中抽象基类的大概,相信大家对abcmeta以及什么是抽象基类已经有所了解.传送门 现在我们来讲讲抽象基类的另一个常用用法--声明协议 所谓声明协议,有点像J ...
随机推荐
- [CTSC2000]丘比特的烦恼
Description 随着社会的不断发展,人与人之间的感情越来越功利化.最近,爱神丘比特发现,爱情也已不再是完全纯洁的了.这使得丘比特很是苦恼,他越来越难找到合适的男女,并向他们射去丘比特之箭.于是 ...
- 题解报告:hdu 1789 Doing Homework again(贪心)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1789 Problem Description Ignatius has just come back ...
- Saas物联网共享平台实战
什么是SaaS系统: 越来越多的软件,开始采用云服务. 云服务只是一个统称,可以分成三大类. IaaS:基础设施服务,Infrastructure-as-a-service PaaS:平台服务,Pla ...
- ORACLE数据库的备份分为物理备份和逻辑备份两种。
物理备份是将实际组成数据库的操作系统文件从一处拷贝到另一处的备份过程,通常是从磁盘到磁带.可以使用 Oracle 的恢复管理器(Recovery Manager,RMAN)或操作系统命令进行数据库的物 ...
- JavaScript的执行
下面内容参考:http://blog.csdn.net/cxiaokai/article/details/7552653 http://www.jb51.net/article/36755.htm 首 ...
- 229 Majority Element II 求众数 II
给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素. 你的算法应该在O(1)空间中以线性时间运行. 详见:https://leetcode.com/problems/major ...
- 222 Count Complete Tree Nodes 完全二叉树的节点个数
给出一个完全二叉树,求出该树的节点个数.完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置.若最底层为第 h ...
- 增大PHP允许上传的文件大小;解决POST Content-Length exceeds the limit
在php.ini中: upload_max_filesize = 1000M ;1GB post_max_size = 1000M 然后重启apache 参考链接
- U9249 【模板】BSGS
题目描述 给定a,b,p,求最小的非负整数x 满足a^x≡b(mod p) 若无解 请输出“orz” 输入输出格式 输入格式: 三个整数,分别为a,b,p 输出格式: 满足条件的非负整数x 输入输出样 ...
- java设计模式之代理模式 ,以及和java 回调机制的区别
java 代理模式就是: 将自己要做的事交给别人去做(这个别人就是代理者,自己就是被代理者),为什么自己能做的要交给别人去做了?假如一个小学生小明,现在要写作业,但是又想玩游戏,他更想玩游戏,并且不想 ...