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实现哈希表
Feb 07 Python
python实现的阳历转阴历(农历)算法
Apr 25 Python
详解Python网络爬虫功能的基本写法
Jan 28 Python
python计算列表内各元素的个数实例
Jun 29 Python
对Python函数设计规范详解
Jul 19 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
Dec 03 Python
python集成开发环境配置(pycharm)
Feb 14 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
Jun 28 Python
Python3.8安装Pygame教程步骤详解
Aug 14 Python
python 爬虫基本使用——统计杭电oj题目正确率并排序
Oct 26 Python
Django contrib auth authenticate函数源码解析
Nov 12 Python
matplotlib bar()实现多组数据并列柱状图通用简便创建方法
Feb 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
社区(php&&mysql)一
2006/10/09 PHP
php 网页游戏开发入门教程一(webgame+design)
2009/10/26 PHP
php smarty函数扩展
2010/03/15 PHP
PHP 中魔术常量的实例详解
2017/10/26 PHP
浅谈PHP实现大流量下抢购方案
2017/12/15 PHP
精心挑选的15个jQuery下拉菜单制作教程
2012/06/15 Javascript
字段太多jquey快速清空表单内容方法
2014/08/21 Javascript
JS两种类型的表单提交方法实例分析
2016/11/28 Javascript
ionic中的$ionicPlatform.ready事件中的通用设置
2017/06/11 Javascript
JavaScript实现兼容IE6的收起折叠与展开效果实例
2017/09/20 Javascript
JavaScript获取用户所在城市及地理位置
2018/04/21 Javascript
微信小程序实现图片滚动效果示例
2018/12/05 Javascript
vue点击当前路由高亮小案例
2019/09/26 Javascript
解决小程序无法触发SESSION问题
2020/02/03 Javascript
JavaScript中的this原理及6种常见使用场景详解
2020/02/14 Javascript
浅析Vue 中的 render 函数
2020/02/28 Javascript
Json实现传值到后台代码实例
2020/06/30 Javascript
Vue 实现v-for循环的时候更改 class的样式名称
2020/07/17 Javascript
在vue-cli3中使用axios获取本地json操作
2020/07/30 Javascript
[02:54]DOTA2英雄基础教程 撼地者
2014/01/14 DOTA
python使用Queue在多个子进程间交换数据的方法
2015/04/18 Python
Python中用PIL库批量给图片加上序号的教程
2015/05/06 Python
Python字符串切片操作知识详解
2016/03/28 Python
Python及Django框架生成二维码的方法分析
2018/01/31 Python
Python OpenCV处理图像之图像像素点操作
2018/07/10 Python
使用python脚本自动创建pip.ini配置文件代码实例
2019/09/20 Python
python编写猜数字小游戏
2019/10/06 Python
wxPython电子表格功能wx.grid实例教程
2019/11/19 Python
html5实现多图片预览上传及点击可拖拽控件
2018/03/15 HTML / CSS
一份Java笔试题
2012/02/21 面试题
营销与策划专业毕业生求职信
2013/11/01 职场文书
战友聚会邀请函
2014/01/18 职场文书
党员批评与自我批评
2014/02/12 职场文书
小班上学期个人总结
2015/02/12 职场文书
MySQL系列之三 基础篇
2021/07/02 MySQL
SQL Server #{}可以防止SQL注入
2022/05/11 SQL Server