Python学习笔记摘要

本文由sangay(曾用名:三界、三界:天地人、xgfone)整理,转载时请注明。

写在前面

笔者在学习C/C++时,本想通过自己的学习,把C/C++的全部语法通过分类、分章节的整理一下,但是,在后来的整理过程中,却发现十分复杂——语言的各个章节交错关联,很难把一个知识点简单的归为一个分类、章节下,甚至一个知识点会牵涉到几个分类下的知识,不好一一说明。(题外话:当我见到《C:参考手册》时,我对其作者特别敬佩,因为他能把这么复杂的语法关系说的这么明白)

尽管Python相对C/C++来说,学习和使用起来比较简单,但其仍有同样的交错复杂。所以,本文只是把一些Python语法要点、难点进行摘要、解析,并不打算讲述全面的Python语法,而是主要分析Python中比较难以理解的部分,比如:Python中变量名与对象的关系、Python中的变量名查找问题、Python在继承时对象的属性是如何查找的等等,以帮助一些初学者迅速理解、掌握Python语言。本文主要根据《Python学习手册(第四版)》进行整理,其中大量摘录了其中的原话,并加入了一些笔者的理解。如果想要学习Python,笔者建议看一下《Python学习手册(第四版)》和Python的官方手册(有全面的索引文档,包括初级学习手册、语法手册、各个标准库的介绍、C/C++接口等等)。在学习Python的过程中,笔者老是见到有人推荐《深入Python》或《深入Python3》,笔者看了一下,不建议初学者看这本书;如果你要问为什么,没有为什么,笔者只是通过自己的学习以及对Python的了解来感觉的,如果你非要问个为什么,我记得CSDN上好像有一篇文章专门讨论了这个问题(网上现在也有一些人反对初学者去看它)或者用搜索引擎去搜索一下。

所以,本文只是辅助一些人对Python在某些方面有一些深入的了解,不建议把它作为一个手册。(当然,你实际上也不会把它作为一个手册!)另外,如果本文没有特殊说明,本文所讲的语法、知识都是基于Python官方的实现——C实现,即CPython;而且,如果没有特殊说明,本文基于的Python版本默认为3.X。

说明一下,《Python学习手册(第四版)》(中文版)的最后一部分没有,只有电子稿,要想阅读,得上网上下载;而且,这本书比较厚,除了最后没有给出的那一部分,整本书还有千把页;另外,在这本书中,作者确实有点比较啰嗦,也就是说,他的一句话会在几个章节里面老是重复出现,一句话非要说上几遍才行,这也可能是书比较厚的原因之一吧,你得适应它的这个状况。


一、基本知识
1、Python命名惯例:
(1)以单一下划线开头的变量名(_X)不会被from module import *语句导入;
(2)前后有双下划线的变量名(__X__)是系统定义的变量名,对解释器有特殊意义;
(3)以两个下划线开头,但结尾没有下划线的变量名(__X)是类的本地变量;
(4)通过交互模式运行时,只有单个下划线的变量名(_)会保存最后表达式的结果。

2、在Python中,变量名没有类型。类型属于对象,而不是变量名;变量名只是引用对象而已。

3、Python中所有的语句都是实时运行的,没有像独立的编译时间这样的流程——这是解析型编程语言的特征之一。

4、作为首要的最佳实践规则是:针对功能性文档(你的对象做什么)使用文档字符串;针对更加微观的文档(令从费解的是表达式是如何工作的)使用 # 注解。

5、sys.path的设置方法只在修改的Python会话或程序(即进程)中才会持续,在Python结束后不会保留下来。PYTHONPATH和.pth文件路径配置是保存在操作系统中,而不是执行中的Python程序。
sys.path的组成部分:(1)程序的主目录;(2)PYTHONPATH目录(如果已经进行了设置);(3)标准链接库目录;(4)任何.pth文件的内容(如果存在的话)

6、迭代器:文件迭代器(open函数返回一个迭代器)
(1)所有迭代工具内部工作起来都是在每次迭代中调用__next__,并捕捉StopIterator异常来确定何时离开。
(2)逐行读取文本文件的最佳方式就是根本不要去读取;其替代的办法就是,让for循环在每轮自动调用next从而前进到下一行。
(3)迭代器在Python中是从C语言的速度运行的,而While循环版本则是通过Python虚拟机运行Python字节码的。


二、表达式与语句
1、Python中的三元表达式:Y if X else Z,等同于C语言中的三元表达式:X?Y:Z。

2、生成器与各种解析:
(1)生成器:(expression  for  target  in  iterator)
                       (expression1  for  target  in  iterator if expression2)
                       (expression  for  target1  in  iterator1 for target2 in iterator2)
         注:其中的for循环和if判断语句可以互相无限嵌套。生成器是单迭代器对象。
(2)列表解析:把圆括号换成方括号即可。
(3)集合解析:把圆括号换成大括号即可。
(4)字典解析:{ x:f(x)  for x in items }
字典解析的语法基本上与以上类似,只不过把相应的表达式改成字典的形式即可。

3、lambda表达式详解:
(1)lambda是一个表达式,而不是一个语句。所以它有一个返回值(即函数对象)
(2)lambda的主体是一个单个的表达式,而不是单个的代码块
(3)默认参数也能够在lambda参数中使用
(4)在lambda主体中的代码像在def内的代码一样都遵循相同的作用域查找法则。lambda表达式引入的一个本地作用域更像一个嵌套的def语句,将会自动从上层函数中、模块中以及内置作用域(通过LEGB法则)查找变量名。
(5)注解只在def语句中有效,在lambda表达式中无效,因为lambda的语法已经限制了它所定义的函数工具。
(6)lambda可以看成是一个被阉割了
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值