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中mechanize库的简单使用示例
Jan 10 Python
python新手经常遇到的17个错误分析
Jul 30 Python
Python基于回溯法子集树模板解决全排列问题示例
Sep 07 Python
完美解决Python 2.7不能正常使用pip install的问题
Jun 12 Python
Django进阶之CSRF的解决
Aug 01 Python
Python入门Anaconda和Pycharm的安装和配置详解
Jul 16 Python
python线程的几种创建方式详解
Aug 29 Python
Python之指数与E记法的区别详解
Nov 21 Python
python rolling regression. 使用 Python 实现滚动回归操作
Jun 08 Python
Matplotlib中%matplotlib inline如何使用
Jul 28 Python
Lombok插件安装(IDEA)及配置jar包使用详解
Nov 04 Python
python Xpath语法的使用
Nov 26 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
全国FM电台频率大全 - 7 吉林省
2020/03/11 无线电
PHP中路径问题的解决方案
2006/10/09 PHP
一个php作的文本留言本的例子(一)
2006/10/09 PHP
两个php日期控制类实例
2014/12/09 PHP
PHP GD库相关图像生成和处理函数小结
2016/09/30 PHP
详解PHP安装mysql.so扩展的方法
2016/12/31 PHP
详解配置 Apache 服务器支持 PHP 文件的解析
2017/02/15 PHP
php文件操作之文件写入字符串、数组的方法分析
2019/04/15 PHP
如何在标题栏显示框架内页面的标题
2007/02/03 Javascript
jQuery live
2009/05/15 Javascript
XMLHTTP 乱码的解决方法(UTF8,GB2312 编码 解码)
2011/01/12 Javascript
简单的jquery拖拽排序效果实现代码
2011/09/20 Javascript
JavaScript日期时间格式化函数分享
2014/05/05 Javascript
JavaScript实现穷举排列(permutation)算法谜题解答
2014/12/29 Javascript
基于jQuery实现select下拉选择可输入附源码下载
2016/02/03 Javascript
js正则表达式replace替换变量方法
2016/05/21 Javascript
bootstrap modal+gridview实现弹出框效果
2017/08/15 Javascript
基于Cookie常用操作以及属性介绍
2017/09/07 Javascript
mpvue开发音频类小程序踩坑和建议详解
2019/03/12 Javascript
nodejs提示:cross-device link not permitted, rename错误的解决方法
2019/06/10 NodeJs
vue+element-ui+axios实现图片上传
2019/08/20 Javascript
微信小程序制作扭蛋机代码实例
2019/09/24 Javascript
python使用calendar输出指定年份全年日历的方法
2015/04/04 Python
Python3通过Luhn算法快速验证信用卡卡号的方法
2015/05/14 Python
Python实现求最大公约数及判断素数的方法
2015/05/26 Python
Python实现对象转换为xml的方法示例
2017/06/08 Python
Python在信息学竞赛中的运用及Python的基本用法(详解)
2017/08/15 Python
python修改txt文件中的某一项方法
2018/12/29 Python
使用Python画股票的K线图的方法步骤
2019/06/28 Python
使用Python脚本从文件读取数据代码实例
2020/01/19 Python
Pedro官网:新加坡时尚品牌
2019/08/27 全球购物
园长自我鉴定
2013/10/06 职场文书
顶碗少年教学反思
2014/02/21 职场文书
社区服务活动总结
2014/05/07 职场文书
解决Golang time.Parse和time.Format的时区问题
2021/04/29 Golang
在Windows Server 2012上安装 .NET Framework 3.5 所遇到的问题
2022/04/29 Servers