关闭

读书笔记三

标签: python tutorial
46人阅读 评论(0) 收藏 举报
分类:

python tutorial 第四章


python中用if..elif..elif..else代替switch..case..

其中else是可选的


python中的for循环是可以用在任何顺序结构中的。list,string皆可。


python中的range()函数还是非常好用的,特别是在配合len()的时候。


python中的break跟C语言的基本一致。但是break外最近的循环后可接else,当结束该循环时直接运行else后的语句,非常方便。同样的else用法可以用在try之后,当try为False的时候,如果没有except,可直接运行后接的else中的语句。(私以为跟except没什么不同。。。)


python是用缩进来代替括号的使用的,所以并不能像C语言一样,括号内可以什么语句都不写。于是python中有了pass,代表空语句,可以避免报错。(私以为用来占地方,给编码者思考的时间,或者等以后用到再回来添加,博主还是很喜欢的。)


python的def是definition的意思。用来建造一个函数。这里与C语言有很大的不同,不需要在函数头那里确定返回的变量类型以及变量参数,如果没有return,返回的是None。但是整个函数体是用缩进来完成的,阅读起来可能稍有不变。def建造函数体的第一部分可以用"""  """来生成一个函数说明文档(docstring),在之后调用或者浏览函数的时候都会起到非常好的作用。同时python提供了__doc__方法可以打印函数的说明文档。

python函数中声明的变量是有一个专属的symbol table的。所以变量引用的查找顺序是:local symbol table、函数体外的被包含的local symbol table(函数可以包含函数)、global symbol table,最后是built-in name。还是很好理解的。所以在python中可以出现函数体内声明的变量与函数体外的变量或者全局变量重名。虽然不建议这样使用,但只要能理顺的清,用起来感觉还是不错的。下面举例说明一下:


但是这里有必要说明一下global变量。变量前加global可以声明全局变量,但是如果什么都不加,放在代码的最外层,依然默认是全局变量。在函数体,类体等等其他代码块内,如果想修改全局变量,这时就必须要加global来分别到底是修改的全局变量还是声明的局部变量了。这里有必要提醒一句,尽量不要使用全局变量,因为这不利于后期的调试和维护。但是全局变量本身是有它的价值的,这里截图stackoverflow Jerub的一个答案,如有侵权,立删。


继续回来。python中的函数是可以通过赋值的形式传递给另一个变量的,也可以理解成改名。但最终是两个名字都可以调用同一个函数,这里的机制是python深层的变量存储机制,在以后的书中应该会讲到。这里会用即可。


python中的函数参数可以用default来取默认值。但是要注意的是,default的值只会被定义一次,就是在建立函数的时候(而不是第一次使用的时候)。所以哪怕default的赋值是来自于全局变量,当全局变量改变时再调用函数,其参数依然是全局变量改变前的值。这样的设计有其合理性。可以保持多次调用函数时的连贯性。比如当参数为一个list时,每次调用都会保留之前list中的值。如果你不喜欢这样,只要在函数体的开始对default的参数进行重新赋值即可。

python中的函数参数也可以用key-value的形式。但是要注意的是,在引用某个函数的时候,key-value的参数要放在后面且避免跟前面的直接value的值在key上重复。至于放在后面的key-value形式的参数,顺序是无所谓的。

python中的函数参数也可以用*name和**name的形式,前者被表示为一个元组,而后者被表示为字典格式,其中当这两者同时存在的时候,要按前面的顺序,*name放在**name之前。而在它们之前也可以不放置或者放置其他正常的参数(当然这里字典形式的参数就不算正常的参数形式了)。这里有一个地方要注意,如果我们在给函数参数直接赋值为一个列表或者元祖时,那么该列表或元祖其实只为*name的一个元素。

刚才有提到如果把一个列表直接传入函数作为参数,它其实只是做一个变量或者称为元素,想要把它拆开来作为多个变量,也很简单。用*拆列表或者元祖,用**拆字典即可。


lambda是python里面很重要的一个语法。它在语法上被限制为一个单独的语句,但是在语义上却相当于一个简单的匿名的函数。这里要注意的是它返回的只是一个函数(也就是匿名函数的地址),你可以用它直接重新命名一个函数来使用(当然这样做的话,也就仅仅把lambda用来简化创建函数时的代码量了),更为重要的时当某些方法的参数需要的是一个函数,或者当某行代码需要一个函数时一次性的用lambda来生成,我想这才是lambda真正该发回作用的地方。这里放下tutorial的例子(博主暂时想不出其他例子。。现在脑子有点秀逗。。)。



接下来是对函数文档的格式说明,Tutorial建议每行的第一个字母大写,行与行之间尽量有个空行,如果顶头写会自动缩进。最后的最后,在函数文档这里不要写废话。,我放一个例子,大家一目了然。



保持一个好的书写代码的习惯是很重要的。下面是tutorial给出的建议:

1.用4个空格键来代替tab键完成缩进。

2.精简每行的代码,不要超过79的字符。

3.用空行来区分函数和类或者是函数体内的大段的代码。

4.如果可以的话,多多加注释。

5.用函数文档(docstrings)

6.在运算符的两边和逗号之后用空格,但是不要在括号两边用空格。

7.命名函数或者类的时候要有一贯的命名规范。建议的规范是用CamelCase这种来命名类,用lower_case_with_underscores来命名函数和方法。对于方法的第一个参数总是用self来命名。

8.如果你的代码要在国际上使用,对于编码的格式要注意,不要随便使用,建议用ASCII码,这是国际上通用的编码格式。


最后,晚安~



0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1095次
    • 积分:106
    • 等级:
    • 排名:千里之外
    • 原创:10篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档