Python是这两年比较火的一门语言,上手容易,代码可读性高,在web开发尤其是机器学习领域内得到很广泛的应用。
我自己半年前也学过Python,当时写了几个网络爬虫,由于长时间不用,现在好多东西都忘记了,这两天抽空回顾了Python。这里整理了下感觉重要的一些知识点。
Python解释器由于设计时有GIL全局锁,导致了多线程无法利用多核。多线程的并发在Python中就是一个美丽的梦。
Python 是一种解释型语言,类似于Java,其实际上是字节编译的,其结果是可以生成一种近似于机器语言的中间形式
,改善了其性能并保持了解释型语言的优点。print(str,end=’’)加上end=’’,可使其不自动换行。
init可以被当成构造器,不过不像其它语言中的构造器,它并不创建实例–它仅仅对象创造后执行的第一个方法,执行
一些必要的初始化工作。Python的多元赋值方式可以实现无需中间变量交换两个变量的值。
|
|
变量名_xxx被看作是私有的,在模块或类外不可用
将经常用到的模块属性替换为一个本地引用,代码运行得更快,而也不用敲那么长的变量名了。
|
|
所有类型对象的类型都是type,它也是所有Python类型的根和所有Python标准类的默认元类(metaclass)。
Python 提供了is 和 is not操作符来测试两个变量是否指向同一个对象。a is b 等价于 id(a) == id(b)
Python 仅缓存简单整型,它认为Python应用程序中这些小整数型会经常用。(Python 3.5.0 范围是-5~256)
str()函数得到的字符串可读性较好,而repr()函数得到的字符串通常可以用来重新获得该对象,通常情况下
|
|
- 比较对象类型时,最好不要使用type(2) == type(0)这样的代码,应该减少函数调用的次数,导入types模块,然后使用如下:
|
|
Python的长整型类型能表达的数值仅仅与本地机器支持的(虚拟)内存大小有关,可以轻松表达很大的值。要用大写字
母“L”表示长整型。abs()返回给定参数的绝对值,如果参数是一个复数,那就返回math.sqr(num.real + num.imag)。
chr()接受一个单字节的整型值,返回一个字符串,其值为对应的字符。函数ord()则相反,它接受一个字符,返回其对应的整型值。
Python中布尔型是整型的子类,但是不能再被继承而生成其它的子类。没有nonzero()(Python 3.x为 bool())
的方法的对象默认值是True.对于值为零的任何数字或空集(空列表、空元组和空字典等)在Python中的布尔值都是False.split()把string切片成一个列表,用join()方法可以把这个列表重新连接成一个字符串。
|
|
所有函数返回多对象(不包括有符号封装的)都是元组类型。tuple = (1,) 创建只有一个元素的元组。
非容器类型(比如数字、字符串和其他‘原子’类型的对象,像代码、类型和range对象等)没有被拷贝一说,浅拷贝是完全用切片操作来完成的。如果元组变量只包含原子类型,对它的深拷贝将不会进行。下面是一个深拷贝的例子
|
|
20.内建函数sorted()通过输入一个字典参数返回一个有序的迭代子。
|
|
- 可以把每行分割为单词,然后计算单词的个数:
|
|
SyntaxError异常是唯一不是在运行时发生的异常。
用try-except语句捕获AssertionError异常:
|
|
- 偏函数
|
|
- 静态方法和类方法,实例方法隐含的参数为类实例,而类方法隐含的参数为类本身。静态方法无隐含参数,主要为了类实例也可以直接调用静态方法。
|
|
- 运算符重载 add()
|
|
27.授权是包装的一个特性,可用于简化处理相关命令性功能,采用已存在的功能以达到最大限度的代码重用。包装一个类型通常是对已存在的类型的一些定制。实现授权的关键点就是覆盖getattr()方法,在代码中包含一个对getattr()内建函数的调用。特殊行为没有在类型方法列表中,不能被访问,因为它们不是属性,如切片。实现一个包装类:
|
|
- slots是一个类变量,由一序列对象组成,由所有合法标识构成的实例属性的集合来表示。它可以是一个列表,元组或可迭代对象,也可以是标识实例能拥有的唯一的属性的简单字符串。任何创建一个其名不在slots中的名字的实例属性都将导致AttributeError异常。
主要目的是节约内存,防止用户随心所欲地增加实例属性。带slots属性的类定义不会存在dict中,除非在slots中增加dict的元素。
|
|
- Python给类提供了call的特别方法,该方法允许程序员创建可调用的对象(实例),默认情况下,call方法是没有实现。意味着大多实例是不可调用的。
|
|
- compile()可用来动态生成字符串形式的Python代码,然后生成一个代码对象。 第一个参数是字符串,第二个参数通常置空,其代表了存放代码对象的名字(字符串类型),第三个参数如下:
- ‘eval’ ,可求值的表达式[和eval()一起使用]
- ‘single’ , 单一执行语句[和exec一起使用]
- ‘exec’ ,可执行语句组[和exec一起使用]
|
|
- sub()和subn()完成搜索和代替的功能,后者还能多返回一个表示替换次数的数字。
|
|
Python3.x 中TCP/UDP 接收和发送的数据要编码和解码(encode()和decode())。
对Python虚拟机的访问由全局解释器锁(global interpreter lock,GIL)来控制,正是这个锁能保证同一时刻只有一个线程运行。
守护进程,在调用thread.start()之前,调用setDaemon()函数设定线程的daemon标志(thread.setDaemon(True)),就表示这个线程“不重要”.