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字符串排序方法
Aug 29 Python
Python实现从脚本里运行scrapy的方法
Apr 07 Python
Python爬虫框架Scrapy实战之批量抓取招聘信息
Aug 07 Python
尝试用最短的Python代码来实现服务器和代理服务器
Jun 23 Python
Python实现动态加载模块、类、函数的方法分析
Jul 18 Python
15行Python代码带你轻松理解令牌桶算法
Mar 21 Python
解决Pycharm中import时无法识别自己写的程序方法
May 18 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
Sep 26 Python
Django框架配置mysql数据库实现过程
Apr 22 Python
Python的logging模块基本用法
Dec 24 Python
python之openpyxl模块的安装和基本用法(excel管理)
Feb 03 Python
pycharm 使用tab跳出正在编辑的括号(){}{}等问题
Feb 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
php遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
Yii2.0 模态弹出框+ajax提交表单
2016/05/22 PHP
利用laravel+ajax实现文件上传功能方法示例
2017/08/13 PHP
PDO::exec讲解
2019/01/28 PHP
让mayfish支持mysqli数据库驱动的实现方法
2010/05/22 Javascript
模仿百度三维地图的js数据分享
2011/05/12 Javascript
Jquery实现仿新浪微博获取文本框能输入的字数代码
2013/02/22 Javascript
JS格式化数字保留两位小数点示例代码
2013/10/15 Javascript
js操作滚动条事件实例
2015/01/29 Javascript
每天一篇javascript学习小结(String对象)
2015/11/18 Javascript
Node.js重新刷新session过期时间的方法
2016/02/04 Javascript
jQuery on()方法绑定动态元素的点击事件无响应的解决办法
2016/07/07 Javascript
深入理解Node.js 事件循环和回调函数
2016/11/02 Javascript
jQuery is not defined 错误原因与解决方法小结
2017/03/19 Javascript
javascript+css3开发打气球小游戏完整代码
2017/11/28 Javascript
利用Node.js批量抓取高清妹子图片实例教程
2018/08/02 Javascript
Vue源码解析之数组变异的实现
2018/12/04 Javascript
详解使用angular框架离线你的应用(pwa指南)
2019/01/31 Javascript
在Python的Django框架中创建和使用模版
2015/07/15 Python
对pandas中时间窗函数rolling的使用详解
2018/11/28 Python
对pytorch网络层结构的数组化详解
2018/12/08 Python
python使用python-pptx删除ppt某页实例
2020/02/14 Python
python剪切视频与合并视频的实现
2020/03/03 Python
python3发送request请求及查看返回结果实例
2020/04/30 Python
Python项目打包成二进制的方法
2020/12/30 Python
澳大利亚墨尔本的在线时装店:LORETA
2018/09/14 全球购物
应聘编辑自荐信范文
2014/03/12 职场文书
《明天,我们毕业》教学反思
2014/04/24 职场文书
奥巴马的演讲稿
2014/05/15 职场文书
个人承诺书格式
2014/06/03 职场文书
选秀节目策划方案
2014/06/06 职场文书
2014年保卫工作总结
2014/12/05 职场文书
先进工作者个人总结
2015/02/15 职场文书
质量承诺书格式范文
2015/04/28 职场文书
党员带头倡议书
2015/04/29 职场文书
CSS中实现动画效果-附案例
2022/02/28 HTML / CSS