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 相关文章推荐
21行Python代码实现拼写检查器
Jan 25 Python
Python selenium 三种等待方式详解(必会)
Sep 15 Python
轻松掌握python设计模式之策略模式
Nov 18 Python
离线安装Pyecharts的步骤以及依赖包流程
Apr 23 Python
Python常用算法学习基础教程
Apr 13 Python
python 网络编程详解及简单实例
Apr 25 Python
Python实现查询某个目录下修改时间最新的文件示例
Aug 29 Python
在Pytorch中使用样本权重(sample_weight)的正确方法
Aug 17 Python
Pytorch高阶OP操作where,gather原理
Apr 30 Python
Python实现ElGamal加密算法的示例代码
Jun 19 Python
Python 使用生成器代替线程的方法
Aug 04 Python
Python实现迪杰斯特拉算法过程解析
Sep 18 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
ThinkPHP5分页paginate代码实例解析
2020/11/10 PHP
很全的显示阴历(农历)日期的js代码
2009/01/01 Javascript
基于JQuery制作的产品广告效果
2010/12/08 Javascript
jquery模拟按下回车实现代码
2011/09/20 Javascript
页面回到顶部的三种实现(锚标记,js)
2012/10/01 Javascript
javascript转换静态图片,增加粒子动画效果
2015/05/28 Javascript
基于JavaScript实现一定时间后去执行一个函数
2015/12/14 Javascript
DOM操作和jQuery实现选项移动操作的简单实例
2016/06/07 Javascript
JavaScript跨域调用基于JSON的RESTful API
2016/07/09 Javascript
JavaScript中const、var和let区别浅析
2016/10/11 Javascript
Angular.JS通过指令操作DOM的方法
2017/05/10 Javascript
vue + element-ui实现简洁的导入导出功能
2017/12/22 Javascript
探索Vue高阶组件的使用
2018/01/08 Javascript
浅谈jquery fullpage 插件增加头部和版权的方法
2018/03/20 jQuery
vue实现form表单与table表格的数据关联功能示例
2019/01/29 Javascript
20道JS原理题助你面试一臂之力(必看)
2019/07/22 Javascript
js实现省级联动(数据结构优化)
2020/07/17 Javascript
[41:56]Spirit vs Liquid Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
基于python的汉字转GBK码实现代码
2012/02/19 Python
windows下wxPython开发环境安装与配置方法
2014/06/28 Python
Python md5与sha1加密算法用法分析
2017/07/14 Python
python实现定时提取实时日志程序
2018/06/22 Python
对Python3+gdal 读取tiff格式数据的实例讲解
2018/12/04 Python
对django后台admin下拉框进行过滤的实例
2019/07/26 Python
如何通过python实现全排列
2020/02/11 Python
使用数据结构给女朋友写个Html5走迷宫游戏
2019/11/26 HTML / CSS
Jacadi Paris美国官方网站:法国童装品牌
2017/10/15 全球购物
法制教育演讲稿
2014/09/10 职场文书
11.9消防日宣传标语
2014/10/08 职场文书
指导教师推荐意见
2015/06/05 职场文书
师范生小学见习总结
2015/06/23 职场文书
dubbo集成zipkin获取Traceid的实现
2021/07/26 Java/Android
欧元符号 €
2022/02/17 杂记
Python实现Excel文件的合并(以新冠疫情数据为例)
2022/03/20 Python
python Tkinter模块使用方法详解
2022/04/07 Python
Windows Server 2012 修改远程默认端口3389的方法
2022/04/28 Servers