Python笔记(叁)继续学习


Posted in Python onOctober 24, 2012

主题:
为什么要有方法呢?
回答居然是:懒惰是一种美德
方法的定义关键词:

def
用callable来判断是否是可调用:

x = 1 
y = math.sqrt 
callable(x) #False 
callable(y) #True

关于方法的返回值:
def hello(name): 
return 'Hello, ' + name + '!'

有一个算法的实现:前面两个数的和是后面的数
fibs = [0, 1] 
for i in range(8): 
fibs.append(fibs[-2] + fibs[-1]) result:[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

如此就可以定义一个方法实现:
def fibs(num): 
result = [0, 1] 
for i in range(num-2): 
result.append(result[-2] + result[-1]) 
return result

跳出方法中命令的执行:
def test(): 
print 'This is printed' 
return 
print 'This is not'

如果方法没有返回任何东西的话,返回的是None
关于方法的参数
我们传入方法的参数是否被改变的问题,在很多语言中都会遇到。

例子:

def try_to_change(n): 
n = 'Mr. Gumby' name = 'Mrs. Entity' 
try_to_change(name) 
name # 'Mrs. Entity'

上面的例子参数没有被改变,那么那些参数是可变的呢。
String number tuples 是作为不可变的类型,我们不能改变它们。如果我们使用可变的类型作为参数就可以实现参数在方法内被改变的功能了。
def change(n): 
n[0] = 'Mr. Gumby' names = ['Mrs. Entity', 'Mrs. Thing'] 
change(names) 
names #['Mr. Gumby', 'Mrs. Thing']

这部分内容其实类似于java,我以前有个博文:猛击即可到达

方法传参,可以通过以下的方式解决参数意思的混淆:

def hello_1(greeting, name): 
print '%s, %s!' % (greeting, name) 
hello_1(greeting='Hello', name='world') #Hello, world!

一个更具名字找人的方法集:
def init(data): #1 
data['first'] = {} 
data['middle'] = {} 
data['last'] = {} def lookup(data, label, name): 
return data[label].get(name)#2 
def store(data, full_name): 
names = full_name.split()#3 
if len(names) == 2: names.insert(1, '')#4 
labels = 'first', 'middle', 'last' 
for label, name in zip(labels, names):#5 
people = lookup(data, label, name) 
if people: 
people.append(full_name)#6 
else: 
data[label][name] = [full_name]

使用:
MyNames = {} 
init(MyNames) 
store(MyNames, 'Magnus Lie Hetland') 
lookup(MyNames, 'middle', 'Lie') #['Magnus Lie Hetland']

理解:

1,data 的数据结构式这样的:{'middle': {}, 'last': {}, 'first': {}}
2,get方法根据建找到值
3,string的split方法,可以加入分隔符,默认是空格为分隔符:

test = 'a,2,d' 
test.split(',') #['a', '2', 'd'] 
name = 'my xy dd' 
names = name.split() 
names #['my', 'xy', 'dd']

4,insert插入的时候后面的值向后退,不要理解成替换
names.insert(1, '') 
names #['my', '', 'xy', 'dd']

5,zip方法说明的例子:
x = [1, 2, 3] 
y = [4, 5, 6] 
zipped = zip(x, y)#(1, 4), (2, 5), (3, 6)

6,这个label里已经存在查找的name了,就把full name加上去
关于参数中的 * 和 **

* :表示任意个数的参数

**

:表示dictionary参数

例子:

def print_params_2(title, *params): 
print title 
print params 
print_params_2('Params:', 1, 2, 3)

结果是

Params:
(1, 2, 3)

def print_params(**params): 
print params 
print_params(x=1, y=2, z=3)

结果是:{'z': 3, 'x': 1, 'y': 2}
结合*可以改进刚刚的存储名字的方法:
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 = {} 
init(d) 
store(d, 'Han Solo') 
store(d, 'Luke Skywalker', 'Anakin Skywalker') 
lookup(d, 'last', 'Skywalker')#['Luke Skywalker', 'Anakin Skywalker']

总结:

工作中虽然用不到,但是抽点时间学习,充实自己也不错哦。
笔记可以用来翻看学习,希望未来的我看到这里的时候,不要气馁,不要骄狂,一点一滴的学习,可能将来没有用,但耐心的本事也许就是需要这样的方式锻炼出来的。
让我们继续前行!

Python 相关文章推荐
Python socket.error: [Errno 98] Address already in use的原因和解决方法
Aug 25 Python
在Python下使用Txt2Html实现网页过滤代理的教程
Apr 11 Python
Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
Jul 02 Python
python中利用await关键字如何等待Future对象完成详解
Sep 07 Python
Django 生成登陆验证码代码分享
Dec 12 Python
python通过Windows下远程控制Linux系统
Jun 20 Python
78行Python代码实现现微信撤回消息功能
Jul 26 Python
Python3 Post登录并且保存cookie登录其他页面的方法
Dec 28 Python
Python中使用__new__实现单例模式并解析
Jun 25 Python
python Django编写接口并用Jmeter测试的方法
Jul 31 Python
pytorch点乘与叉乘示例讲解
Dec 27 Python
520使用Python实现“我爱你”表白
May 20 Python
python笔记(2)
Oct 24 #Python
python笔记(1) 关于我们应不应该继续学习python
Oct 24 #Python
Python的一些用法分享
Oct 07 #Python
Python天气预报采集器实现代码(网页爬虫)
Oct 07 #Python
python代码检查工具pylint 让你的python更规范
Sep 05 #Python
python 基础学习第二弹 类属性和实例属性
Aug 27 #Python
用Python写的图片蜘蛛人代码
Aug 27 #Python
You might like
一个php作的文本留言本的例子(二)
2006/10/09 PHP
php数据访问之增删改查操作
2016/05/09 PHP
PHP+Ajax实现的检测用户名功能简单示例
2019/02/12 PHP
如何用javascript控制上传文件的大小
2006/10/26 Javascript
从阶乘函数对比Javascript和C#的异同
2012/05/31 Javascript
js获取电脑分辨率的思路及操作
2013/11/22 Javascript
为什么JS中eval处理JSON数据要加括号
2015/04/13 Javascript
JavaScript程序设计之JS调试
2015/12/09 Javascript
js制作网站首页图片轮播特效代码
2016/08/30 Javascript
原生js实现放大镜特效
2017/03/08 Javascript
JS给按钮添加跳转功能类似a标签
2017/05/30 Javascript
Vue渲染函数详解
2017/09/15 Javascript
vue 使用Jade模板写html,stylus写css的方法
2018/02/23 Javascript
精读《Vue3.0 Function API》
2020/05/20 Javascript
为什么JavaScript中0.1 + 0.2 != 0.3
2020/12/03 Javascript
Python中计算三角函数之cos()方法的使用简介
2015/05/15 Python
Python基本socket通信控制操作示例
2019/01/30 Python
详解Python3除法之真除法、截断除法和下取整对比
2019/05/23 Python
给你一面国旗 教你用python画中国国旗
2019/09/24 Python
详解numpy矩阵的创建与数据类型
2019/10/18 Python
Python2手动安装更新pip过程实例解析
2020/07/16 Python
scrapy处理python爬虫调度详解
2020/11/23 Python
HTML5 canvas标签实现刮刮卡效果
2015/04/24 HTML / CSS
中国跨镜手机配件批发在线商店:TVC-Mall
2019/08/20 全球购物
Java程序员面试题
2013/07/15 面试题
安全生产检讨书
2014/01/21 职场文书
公司经理聘任书
2014/03/29 职场文书
捐资助学倡议书
2014/04/15 职场文书
篮球比赛拉拉队口号
2014/06/10 职场文书
教师党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
党员教师个人对照检查材料(群众路线)
2014/09/26 职场文书
2014年人力资源部工作总结
2014/11/19 职场文书
客户答谢会致辞
2015/01/20 职场文书
2015年清明节活动总结
2015/02/09 职场文书
2015年银行工作总结范文
2015/04/01 职场文书
超详细Python解释器新手安装教程
2021/05/10 Python