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中的字符串与字符编码(推荐)
Dec 14 Python
django加载本地html的方法
May 27 Python
Python3对称加密算法AES、DES3实例详解
Dec 06 Python
Python3中列表list合并的四种方法
Apr 19 Python
python的re模块使用方法详解
Jul 26 Python
Python多线程爬取豆瓣影评API接口
Oct 22 Python
opencv3/C++实现视频读取、视频写入
Dec 11 Python
Python如何基于rsa模块实现非对称加密与解密
Jan 03 Python
Python Tensor FLow简单使用方法实例详解
Jan 14 Python
python 在threading中如何处理主进程和子线程的关系
Apr 25 Python
python中round函数如何使用
Jun 19 Python
pandas DataFrame.shift()函数的具体使用
May 24 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
我常用的几个类
2006/10/09 PHP
十天学会php之第十天
2006/10/09 PHP
PHP中的多行字符串传递给JavaScript的两种方法
2014/06/19 PHP
destoon各类调用汇总
2014/06/20 PHP
用脚本调用样式的几种方法
2006/12/09 Javascript
JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现
2012/08/14 Javascript
关于jQuery新的事件绑定机制on()的使用技巧
2013/04/26 Javascript
使用js显示当前时间示例
2014/03/02 Javascript
jQuery的$.proxy()应用示例介绍
2014/04/03 Javascript
javascript常见数据验证插件大全
2015/08/03 Javascript
Node.js静态文件服务器改进版
2016/01/10 Javascript
深入浅析Bootstrap列表组组件
2016/05/03 Javascript
JS使用JSON作为参数实例分析
2016/06/23 Javascript
nodejs开发微信小程序实现密码加密
2017/07/11 NodeJs
js排序与重组的实例讲解
2017/08/28 Javascript
使用store来优化React组件的方法
2017/10/23 Javascript
node.js中ws模块创建服务端和客户端,网页WebSocket客户端
2019/03/06 Javascript
解决vue单页面修改样式无法覆盖问题
2019/08/05 Javascript
微信小程序 冒泡事件原理解析
2019/09/27 Javascript
[31:29]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第一场 12.20
2020/12/23 DOTA
Python中的闭包实例详解
2014/08/29 Python
Python的迭代器和生成器
2015/07/29 Python
关于python下cv.waitKey无响应的原因及解决方法
2019/01/10 Python
python获取栅格点和面值的实现
2020/03/10 Python
Python多线程thread及模块使用实例
2020/04/28 Python
在pycharm中使用matplotlib.pyplot 绘图时报错的解决
2020/06/01 Python
CSS3 Backgrounds属性相关介绍
2011/05/11 HTML / CSS
阿迪达斯德国官方网站:adidas德国
2017/07/12 全球购物
澳大利亚时尚前卫设计师珠宝在线:Amber Sceats
2017/10/04 全球购物
京东国际站:JOYBUY
2017/11/23 全球购物
财务人员的自我评价范文
2014/03/03 职场文书
烹饪大赛策划方案
2014/05/26 职场文书
领导班子三严三实心得体会
2014/10/13 职场文书
2015年招聘工作总结
2014/12/12 职场文书
2015年驾驶员工作总结
2015/04/29 职场文书
《三国志》赏析
2019/08/27 职场文书