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 MD5文件生成码
Jan 12 Python
Python设计模式之观察者模式实例
Apr 26 Python
基于python的Tkinter实现一个简易计算器
Dec 31 Python
利用Python操作消息队列RabbitMQ的方法教程
Jul 19 Python
Python使用回溯法子集树模板解决迷宫问题示例
Sep 01 Python
python版简单工厂模式
Oct 16 Python
mac系统安装Python3初体验
Jan 02 Python
浅谈Python2获取中文文件名的编码问题
Jan 09 Python
python脚本监控Tomcat服务器的方法
Jul 06 Python
python requests 库请求带有文件参数的接口实例
Jan 03 Python
使用GitHub和Python实现持续部署的方法
May 09 Python
python中最小二乘法详细讲解
Feb 19 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中使用sftp教程
2015/03/30 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
PHP调用其他文件中的类
2018/04/02 PHP
php实现的表单验证类完整示例
2019/08/13 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
5 cool javascript apps
2007/03/24 Javascript
ExtJs之带图片的下拉列表框插件
2010/03/04 Javascript
编写可维护面向对象的JavaScript代码[翻译]
2011/02/12 Javascript
自编jQuery插件实现模拟alert和confirm
2014/09/01 Javascript
深入理解JavaScript系列(47):对象创建模式(上篇)
2015/03/04 Javascript
javascript实现点击商品列表checkbox实时统计金额的方法
2015/05/15 Javascript
jquery实现像栅栏一样左右滑出式二级菜单效果代码
2015/08/24 Javascript
Javascript实现检测客户端类型代码封包
2015/12/03 Javascript
你所未知的3种Node.js代码优化方式
2016/02/25 Javascript
angularJS之$http:与服务器交互示例
2017/03/17 Javascript
webpack+vuex+axios 跨域请求数据的示例代码
2018/03/06 Javascript
JS滚轮控制图片缩放大小和拖动的实例代码
2018/11/20 Javascript
React Native中Mobx的使用方法详解
2018/12/04 Javascript
JavaScript中如何调用Java方法
2020/09/16 Javascript
[04:11]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/01/30 DOTA
[09:34]2018DOTA2国际邀请赛寻真——永不放弃的iG
2018/08/14 DOTA
[42:32]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第二场 10.28
2020/10/28 DOTA
深入理解Python 代码优化详解
2014/10/27 Python
python使用mailbox打印电子邮件的方法
2015/04/30 Python
python3去掉string中的标点符号方法
2019/01/22 Python
Python应用实现处理excel数据过程解析
2020/06/19 Python
详解HTML5 Canvas标签及基本使用
2020/01/10 HTML / CSS
美国新兴城市生活方式零售商:VILLA
2017/12/06 全球购物
奥地利时尚、美容、玩具和家居之家:Kastner & Öhler
2020/04/26 全球购物
我为党旗添光彩演讲稿
2014/09/10 职场文书
教师群众路线心得体会
2014/11/04 职场文书
公证处委托书
2015/01/28 职场文书
幼儿园教师师德表现自我评价
2015/03/05 职场文书
党风廉政建设个人总结
2015/03/06 职场文书
OpenCV图像变换之傅里叶变换的一些应用
2021/07/26 Python
Java Spring Lifecycle的使用
2022/05/06 Java/Android