《python学习手册》学习笔记

来源:转载

python格式化传参数非常赞,用数字标明位置,值得java学习
for这种迭代语法很强大,有函数式编程的范儿

python用none来表示null

为什么散列能最快速的搜索

字典是无序的

字典的updateshi是合并的意思

字典的for迭代的是来key

带默认值的get方法避免找不到是一个不错的做法

literal是字面值为什么要翻译成长量呢?

zip这个函数很有意思

用到for叫解析

视图是啥东东?

将元组和文件放一起,这结构组织的很无语…

文件分是读写分离的

pickle可以看成序列化和反序列化工具

python中用模块来表示jar包的概念

struct用来协助做序列化和反序列化的

python中的内置函数是这种非面向对象的做法可以使代码更简洁

简单的说,==对应java中的equals,is对应java中的==

在所有判断中出现的对象只有两种可能的结果:真和假

python的动态性使得我们尽量不要使用type

pass这个东西很有意思,用来占位的,和字面的意思貌似没关联

常用的函数都被定义成内置的了

语句和内置函数是有区别的

python可以让人少打字^0^

省略括号,结尾用冒号是一个坑爹的写法,因为大部分语言都不会这样写

python的一大特色就是用缩进来表明代码块的结构,这个也用来避免大块大块的程序块的写法,因为没有很好的可读性

里面举的采用缩进导致的陷阱例子我觉得采用大括号就能很好避免。

我不认为python去掉各种括号和结尾的分号能提高使用者的开发效率。

判断之后的冒号可以和case中的冒号相提并论

python会将异常用来做判断

else是一个万能的关键词

赋值可以成组成组的进行

特性很好理解,而怎么用还得多加练习才能融会贯通,才能算精通。

一些原语修改对象的方法返回的是none

参数自身除了有位置信息还有名称信息,这一点也不错,方便更灵活传递参数

print函数更适合面向对象控的口味

stdout可以看成水龙头,可以外接各种水管,即各种实现了write方法的对象

为了简洁python无所不用其极,连elseif都要简写为elif, python代码的可读性值得怀疑

python的swith case被if else 干掉了。字典又把if else干掉了。

三元运算也可以用and or 来实现。但是不好理解,只能针对bool

bool值会转换成0,1,这个可以用在两个值的列表中

因为没有大括号,只好用pass来表明一个空块。也可以认为是一个空实现或待实现

循环中的else也是为了去避免使用判断标志。

for一般和序列结合使用,用来遍历序列

zip很难让人将其与并行联系起来

zip的一个作用就是将key,value列表配对成字典

enumerate实际上是将一个list转换成一个map,其key为位置

把表达式放到for循环的前面就成了列表解析,这个也是循环遍历一种更简化的写法

简化代码,隐藏细节是所有编程语言必须遵守的一条原则

列表解析比循环遍历更高效,因为它会直接翻译成c语言

如果列表解析写的太复杂则可读性就会很差,比如多层循环嵌套

迭代协议是从左到右遍历列表元素

列表解析的另一种形式就是map内置函数

迭代协议是一切容器处理的基础

突然发现all和any是一对反义词

join和split也是一对反义词

*可以理解为正则表达式中的*用来表示一个和多个

zip的zip就是unzip

zip就是将多个列表按列重组

查询帮助叫dir,字典容器叫dict

原语修改的函数不会结果

使用函数的最终目的就是为了重用,降低代码的复杂度

函数也是对象,函数名就是函数的变量

def实际上是创建一个函数对象并赋值给一个函数变量

函数也是对象,这个跟js很想

支持操作符重载这一点很像c++

动态性导致我们必须通过测试来发现错误,而不是编译器。

builtin相当于java.lang

内部使用外部变量用global或nolocal

由于变量在使用的时候声明,所以用global来标明这是个全局变量,但是尽量别这样做

全局变量可以作为与其他程序连接的纽带,比如多线程,通过全局变量来共享数据。

嵌套函数会让程序变得复杂,降低可读性

简单的嵌套函数就是所谓的lambda

nonlocal一般在嵌套函数中常见,用来在嵌套函数中的使用上层函数中的变量。

非定长参数*args
将参数解析成字典**args
这些都是为了解决不定参数的问题,最终是为了让python这种语言更具有动态性。即不仅参数类型是可变的,参数个数也是可变的,动态的。

keyword-only这种参数,表示变长参数后面的参数必须都给出参数名,而且在调用的时候是必须出现的,除非函数定义的时候给定了默认值

关键字参数对函数会非常方便,为什么java没有?

一般递归都可以改写为循环

简单的说,lambda就是匿名函数,而且是简单的表达式函数,用来处理简单的任务

匿名函数是提高代码可读性,简化代码的利器

map函数就是用来对序列中的每一个元素执行指定的函数,至于是不是并行不知道。

reduce将对一个列表进行聚集

filter对一个列表进行过滤

列表解析是封装在一个列表中的,因此它的返回结果是一个列表

yield是future吗?不是,而是一个延迟迭代器。

用来创建迭代表达式的都可以看成生成器表达式

这种表达式有一个好处就是可以边迭代边计算,对于大结果集的几圈遍历非常有利。

生成器表达式和函数的区别就像匿名函数和函数的区别

zip太难记了,可以理解为将多个列表打包成一个新的包含多个元组的列表

两个列表用zip可以用来构造一个字典

生成器可以边解析边迭代,速度慢但是对内存的占用小

elapsed是个不错的变量用来命名消耗时间

yield是一个和return类似的关键词

python没有私有和公有的概念,所有属性和函数方法都是公有的, 当然我这个是针对模块。

一个文件就是一个模块。

模块的导入过程也是一个赋值的过程

reload可以让修改立即生效。

__init__文件用来放加载包时的初始化内容。

python的import机制为何没java的来的了解,非得还使用一个from

为了能用于大型应用中,出现了包的概念,用来组织和管理大量的代码。

貌似因为python基础库没有很好的包结构,导致了相对导入的出现

当前路径下得模块会被优先选择 。

__all__指定要暴露的内容,_x用来表明私有的东西

主程序中通过__main__来指明要执行的程序

__name__是一个标识,用来告诉模块当前以什么方式在执行。

as是别名的意思

__打头的属性都是内置的

重载模块不具有传递性

from表明导入的变量是拷贝

__init__是构造函数

模块很像类,而from相当于创建了一个模块的副本,类似于对模块做实例化,reload相当于重新实例化

代码块就像写信一样,一行必须以冒号结束,类似写信的称呼,后面就是具体内容。

类的灵活性体现在可以直接给属性赋值,没有私有公有的概念,直接通过给一个新属性赋值创建新属性。

python不习惯类和模块首字母大写?

只有在类涉及到与基本类型进行一些常规运算的时候才应该考虑运算符重载

一段代码块(类,方法等)不允许为空,如果需要可以用pass来标识

类没有实例也可以当对象来用,只是里面的属性和方法相当于是静态的

类和实例都可以通过内部字典__dict__来访问属性和方法,但是二者是分开独立的,没有继承关系。

空类可以用来模拟字典

类中的self使用太多了

调用父类方法:使用类去调用方法传入self实例
属性不需要定义,但必须在初始化方法中挂在self下。而且在类的任何地方使用都必须通过self来调用。

python没有new这个关键字,直接类加括号创建实例

python中的序列化工具叫pickle

通过类修改属性会影响所有的实例的属性值,而通过实例只会影响实例本身

类变量和实例变量即使相同也是两个不同的变量,互不干扰
实例方法的调用内部会翻译成类方法的调用,并且将实例作为类方法的第一个参数。

不存在不传实例(self)的静态方法

操作符重载本质上还是对基本类型的操作符调用,只不过用类做了一个层封装

__iter__每次返回同一个对象则是公用迭代器,否则就是不同的迭代器

操作符重载相当于内部定义的一套公共的接口列表,任何类都可以实现这些接口。比如类似java中的比较器,迭代器接口

python没有提供私有属性的关键词或者描述符,但是可以通过重载运算符来实现,好麻烦的说

__call__相当于构造函数的重载,区别在于构造函数是在类上调用,而前者还能在实例上调用。另外一个功能就是可以将类当成一个函数使用,但是有一个好处就是可以保存状态
操作符重载的规律:一般内部还是执行的某个属性与参数的操作符运算。重载方法只是一个代理而已。

类中的函数定义应该看成变量的定义,即 将一个函数和一个变量关联起来。这样就可以很好理解重载了,名字只能跟一个函数关联

__真是一个神奇的前缀

类中的实例方法可以作为对象赋值,在其他地方调用,相当于别名的意思

为什么要多重继承,就像一个人可以是工程师,作家一样

__method相当于一个私有方法

多重继承可以看成多个内的混合

python可以在实例动态添加属性

函数可以直接作为方法的注解,前提是该函数接受一个方法做参数,比如staticmethod,而且返回的是一个可调用对象。因此这个不仅可以看成注解,还可以看成包装,或者装饰。

给类的实例属性赋值,类也能访问该属性

异常可以看成goto

捕获到异常,则先执行异常再执行finally,没捕获到则先执行finally再抛出异常

python使用异常来控制流程,导致并非所有的异常都是错误(但是所有的错误一定是异常),爱奇艺。比如用异常来判断是否到达文件末尾

with/as是try/finally的简化











分享给朋友:
您可能感兴趣的文章:
随机阅读: