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 相关文章推荐
下载安装setuptool和pip linux安装pip    
Jan 24 Python
使用Python的Tornado框架实现一个Web端图书展示页面
Jul 11 Python
使用Python对Excel进行读写操作
Mar 30 Python
Python将图片转换为字符画的方法
Jun 16 Python
python3实现域名查询和whois查询功能
Jun 21 Python
Python多线程编程之多线程加锁操作示例
Sep 06 Python
Python读取指定日期邮件的实例
Feb 01 Python
python函数参数(必须参数、可变参数、关键字参数)
Aug 16 Python
python matplotlib饼状图参数及用法解析
Nov 04 Python
Python绘图之二维图与三维图详解
Aug 04 Python
Python tkinter实现日期选择器
Feb 22 Python
Python+Tkinter打造签名设计工具
Apr 01 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
用PHP4访问Oracle815
2006/10/09 PHP
php实现概率性随机抽奖代码
2016/01/02 PHP
YII Framework框架教程之安全方案详解
2016/03/14 PHP
THINKPHP截取中文字符串函数实例代码
2017/03/20 PHP
实例讲解通过​PHP创建数据库
2019/01/20 PHP
Mootools 1.2教程 定时器和哈希简介
2009/09/15 Javascript
图像替换新技术 状态域方法
2010/01/28 Javascript
Javascript简单实现可拖动的div
2013/10/22 Javascript
JavaScript数组深拷贝和浅拷贝的两种方法
2014/04/16 Javascript
js Dialog 去掉右上角的X关闭功能
2014/04/23 Javascript
[原创]推荐10款最热门jQuery UI框架
2014/08/19 Javascript
jquery实现手机号码选号的方法
2015/07/31 Javascript
配置Grunt的Task时通配符支持和动态生成文件名问题
2015/09/06 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
2016/06/12 Javascript
bootstrap PrintThis打印插件使用详解
2017/02/20 Javascript
vue webpack打包优化操作技巧
2018/02/22 Javascript
小白教程|一小时上手最流行的前端框架vue(推荐)
2019/04/10 Javascript
Jquery 动态添加元素并添加点击事件实现过程解析
2019/10/12 jQuery
[03:40]DOTA2抗疫特别篇《英雄年代》
2020/02/28 DOTA
使用python统计文件行数示例分享
2014/02/21 Python
Python学习笔记_数据排序方法
2014/05/22 Python
Python开发常用的一些开源Package分享
2015/02/14 Python
详解Golang 与python中的字符串反转
2017/07/21 Python
pandas的连接函数concat()函数的具体使用方法
2019/07/09 Python
python tkinter基本属性详解
2019/09/16 Python
浅谈Python类中的self到底是干啥的
2019/11/11 Python
CSS3制作皮卡丘动画壁纸的示例
2020/11/02 HTML / CSS
理肤泉英国官网:La Roche-Posay英国
2019/01/14 全球购物
M.M.LaFleur官网:美国职业女装品牌
2020/10/27 全球购物
精通CAD能手自荐书
2014/01/31 职场文书
婚礼主持词开场白
2014/03/13 职场文书
保健品市场营销方案
2014/03/31 职场文书
KTV门卫岗位职责
2014/10/09 职场文书
校园开放日新闻稿
2015/07/17 职场文书
Java Shutdown Hook场景使用及源码分析
2021/06/15 Java/Android
CSS使用伪类控制边框长度的方法
2022/01/18 HTML / CSS