博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python笔记(叁)-继续学习
阅读量:7308 次
发布时间:2019-06-30

本文共 3311 字,大约阅读时间需要 11 分钟。

Python笔记

  最近时间挤来挤去,看英文的文档,顺便熟悉英语,需要反复好几遍,才能做点笔记。读的是《Beginning.Python.From.Novice.to.Professional》,网上有资源可以下载。

 

主题:

为什么要有方法呢?

回答居然是:懒惰是一种美德

方法的定义关键词:

  def

用callable来判断是否是可调用:

x = 1y = math.sqrtcallable(x)        #Falsecallable(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)#2def 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 paramsprint_params_2('Params:', 1, 2, 3)

结果是

Params:

(1, 2, 3)

def print_params(**params):    print paramsprint_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']

 

总结:

工作中虽然用不到,但是抽点时间学习,充实自己也不错哦。

笔记可以用来翻看学习,希望未来的我看到这里的时候,不要气馁,不要骄狂,一点一滴的学习,可能将来没有用,但耐心的本事也许就是需要这样的方式锻炼出来的。

让我们继续前行!

 

----------------------------------------------------------------------

努力不一定成功,但不努力肯定不会成功。

共勉

转载地址:http://nqzim.baihongyu.com/

你可能感兴趣的文章
重启ipconfig 时,出现错误:Error: Connection activation failed.....解决方法
查看>>
我的校园,我的无忧网
查看>>
xcode通配符及开发环境设置
查看>>
我的友情链接
查看>>
windows server 2008创建活动目录
查看>>
专门供开发者使用的免费的虚拟机资源:超能云 (SuperVessel Cloud)
查看>>
ios开发图形绘制
查看>>
图像处理小结
查看>>
只显示指定网卡IP地址命令
查看>>
关于struts1.x action中方法的命名规范
查看>>
我的友情链接
查看>>
转发: VM Depot 喜迎中国本土开源镜像!
查看>>
Zabbix服务器yum安装
查看>>
嘿牛理财师技术服务支持
查看>>
关于sudo命令的使用
查看>>
Gearman Server 使用 MySQL UDFs 来管理和保持队列
查看>>
Java Magic. Part 1: java.net.URL
查看>>
Java 8系列之重新认识HashMap
查看>>
JAVA CAS单点登录之三:CAS代理模式演练
查看>>
js 构造函数继承
查看>>