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 当前全局变量和入口参数的所有属性
Jul 01 Python
pygame学习笔记(4):声音控制
Apr 15 Python
Python实现字典的key和values的交换
Aug 04 Python
详解Python使用simplejson模块解析JSON的方法
Mar 24 Python
python3批量删除豆瓣分组下的好友的实现代码
Jun 07 Python
django如何连接已存在数据的数据库
Aug 14 Python
使用python实现语音文件的特征提取方法
Jan 09 Python
详解Python3定时器任务代码
Sep 23 Python
pandas 空数据处理方法详解
Nov 02 Python
python接口自动化如何封装获取常量的类
Dec 24 Python
一文解决django 2.2与mysql兼容性问题
Jul 15 Python
pytorch 使用半精度模型部署的操作
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
Parse正式发布开源PHP SDK
2014/08/11 PHP
PHP防盗链代码实例
2014/08/27 PHP
PHP请求远程地址设置超时时间的解决方法
2016/10/29 PHP
laravel config文件配置全局变量的例子
2019/10/13 PHP
老鱼 浅谈javascript面向对象编程
2010/03/04 Javascript
jquery URL参数判断,确定菜单样式
2010/05/31 Javascript
iframe子页面与父页面在同域或不同域下的js通信
2014/05/07 Javascript
angularjs 源码解析之injector
2016/08/22 Javascript
jquery在启动页面时,自动加载数据的实例
2018/01/22 jQuery
js正则相关知识点专题
2018/05/10 Javascript
对类Vue的MVVM前端库的实现代码
2018/09/07 Javascript
解决vue项目nginx部署到非根目录下刷新空白的问题
2018/09/27 Javascript
JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能分析
2019/03/06 Javascript
javascript中数组的常用算法深入分析
2019/03/12 Javascript
[00:18]天涯墨客三技能展示
2018/08/25 DOTA
Python中的rjust()方法使用详解
2015/05/19 Python
Python中json格式数据的编码与解码方法详解
2016/07/01 Python
Python 编码Basic Auth使用方法简单实例
2017/05/25 Python
Python基于TCP实现会聊天的小机器人功能示例
2018/04/09 Python
Numpy array数据的增、删、改、查实例
2018/06/04 Python
详解Python列表赋值复制深拷贝及5种浅拷贝
2019/05/15 Python
对Python3中列表乘以某一个数的示例详解
2019/07/20 Python
Python使用docx模块实现刷题功能代码
2020/02/13 Python
keras中模型训练class_weight,sample_weight区别说明
2020/05/23 Python
HTML5自定义data-* data(obj)属性和jquery的data()方法的使用
2012/12/13 HTML / CSS
耐克奥地利官网:Nike奥地利
2019/08/16 全球购物
加拿大的标志性百货公司:Hudson’s Bay(哈得逊湾)
2019/09/03 全球购物
实现向右循环移位
2014/07/31 面试题
常用UNIX 命令(Linux的常用命令)
2015/12/26 面试题
细节决定成败演讲稿
2014/05/12 职场文书
大国崛起观后感
2015/06/02 职场文书
2015年计算机教师工作总结
2015/07/22 职场文书
欢送领导祝酒词
2015/08/12 职场文书
2016年小学植树节活动总结
2016/03/16 职场文书
Python函数中的不定长参数相关知识总结
2021/06/24 Python
叶县这家生产军用电台的兵工厂,人称“四机部”,走出一上将
2022/02/18 无线电