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通过DOM和SAX方式解析XML的应用实例分享
Nov 16 Python
深入源码解析Python中的对象与类型
Dec 11 Python
Python部署web开发程序的几种方法
May 05 Python
Python中支持向量机SVM的使用方法详解
Dec 26 Python
python 除法保留两位小数点的方法
Jul 16 Python
Windows 64位下python3安装nltk模块
Sep 19 Python
django 实现将本地图片存入数据库,并能显示在web上的示例
Aug 07 Python
python实现递归查找某个路径下所有文件中的中文字符
Aug 31 Python
matplotlib实现显示伪彩色图像及色度条
Dec 07 Python
解决Pycharm的项目目录突然消失的问题
Jan 20 Python
Python中的整除和取模实例
Jun 03 Python
详解vscode实现远程linux服务器上Python开发
Nov 10 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 内存缓存加速功能memcached安装与用法
2009/09/03 PHP
PHP引用(&)各种使用方法实例详解
2014/03/20 PHP
php针对cookie操作的队列操作类实例
2014/12/10 PHP
PHP 二维数组和三维数组的过滤
2016/03/16 PHP
Docker 如何布置PHP开发环境
2016/06/21 PHP
PHP设计模式之装饰器模式定义与用法简单示例
2018/08/13 PHP
JavaScript方法和技巧大全
2006/12/27 Javascript
baidu博客的编辑友情链接的新的层窗口!经典~支持【FF】
2007/02/09 Javascript
通过DOM脚本去设置样式信息
2010/09/19 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
2013/01/23 Javascript
用Javascript来生成ftp脚本的小例子
2013/07/03 Javascript
高效的获取当前元素是父元素的第几个子元素
2013/10/15 Javascript
js闭包实现按秒计数
2015/04/23 Javascript
Vue+jquery实现表格指定列的文字收缩的示例代码
2018/01/09 jQuery
javacript replace 正则取字符串中的值并替换【推荐】
2018/09/13 Javascript
electron + vue项目实现打印小票功能及实现代码
2018/11/25 Javascript
解决vuex刷新状态初始化的方法实现
2019/08/15 Javascript
简单了解微信小程序 e.target与e.currentTarget的不同
2019/09/27 Javascript
JS插入排序简单理解与实现方法分析
2019/11/25 Javascript
JS数据类型(基本数据类型、引用数据类型)及堆和栈的区别分析
2020/03/04 Javascript
NodeJS模块Buffer原理及使用方法解析
2020/11/11 NodeJs
[01:05]DOTA2完美大师赛趣味视频之选手教你打职业
2017/11/23 DOTA
详解Python设计模式编程中观察者模式与策略模式的运用
2016/03/02 Python
Python的Asyncore异步Socket模块及实现端口转发的例子
2016/06/14 Python
Python实现的自定义多线程多进程类示例
2018/03/23 Python
Python3.6简单的操作Mysql数据库的三个实例
2018/10/17 Python
python 画函数曲线示例
2019/12/04 Python
python__new__内置静态方法使用解析
2020/01/07 Python
CSS3 box-sizing属性
2009/04/17 HTML / CSS
Timex手表官网:美国运动休闲手表品牌
2017/01/28 全球购物
英国电气世界:Electrical World
2019/09/08 全球购物
不拖欠农民工工资承诺书
2014/03/31 职场文书
《卖木雕的少年》教学反思
2014/04/11 职场文书
活动宣传策划方案
2014/05/23 职场文书
2019年描写人生经典诗句大全
2019/07/08 职场文书
Javascript设计模式之原型模式详细
2021/10/05 Javascript