Python基础

python的优势不在于运行效率,而在于开发效率和高可维护性。针对特定的问题挑选合适的工具,本身也是一项技术能力。


Python2.7


1:Tornado

Tornado是一种Web服务器软件的开源版本。Tornado和现在的主流 Web服务器框架(包括大多数Python的框架:它是非阻塞式服务器,而且速度相当快。

得利于其非阻塞的方式和对epoll的运用,Tornado每秒可以处理数以千计的连接,因此Tornado 是实时Web 服务的一个理想框架。


2:内置类属性

__name__是当前模块名,当模块被直接运行时模块名为__main__。这句话的意思就是,当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行。

__dict__: 类的属性(包含一个字典,由类的数据属性组成)

__doc__ :类的文档字符串

__name__: 类名

__module__:类定义所在的模块(类的全名是'__main__.className',如果类位于一个导入模块mymod中,那么className.__module__等于mymod

__bases__ :类的所有父类构成元素(包含了一个由所有父类组成的元组)

__del__,析构函数__del__在对象销毁的时候被调用,当对象不再被使用时,__del__方法运行:

__str__,toString方法


3:参数组合

Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

所以,对于任意函数,都可以通过类似func(*args,**kw)的形式调用它,无论它的参数是如何定义的。


4:面向对象

注意:通常你需要在单独的文件中定义一个类,

issubclass()- 布尔函数判断一个类是另一个类的子类或者子孙类,语法: issubclass(sub,sup)

isinstance(obj,Class) 布尔函数如果objClass类的实例对象或者是一个Class子类的实例对象则返回true


__foo__:定义的是特殊方法,一般是系统定义名字,类似 __init__()之类的。

_foo:以单下划线开头的表示的是protected类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于from module import*

__foo:双下划线的表示的是私有类型(private)的变量,只能是允许这个类本身进行访问了。


5:super方法

super()函数是用于调用父类(超类)的一个方法。

super是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。

MRO就是类的方法解析顺序表,其实也就是继承父类方法时的顺序表。

Python3.xPython2.x 的一个区别是:Python 3 可以使用直接使用super().xxx 代替super(Class,self).xxx :


6Python是动态语言,所以它的多态就是顺理成章的事

defwho_am_i(x):

printx.whoAmI()

当传入的x是不同的类的时候,它会调用对应的类的whoAmI()方法。



7:@classmethod的使用场合

参考:

http://30daydo.com/article/89

https://www.zhihu.com/question/20021164

@classmethod装饰。它的作用就是有点像静态类,比静态类不一样的就是它可以传进来一个当前类作为第一个参数。


8:说明

类变量:类定义内部定义的变量,类变量,Python是动态语言,不存在说静态变量,类变量所有的类对象共享

成员变量: 类定义内部__init__函数内以self开头定义的变量

类方法:类内部定义的以@classmethod装饰的函数是类方法

静态方法:类内部定义的以@staticmethod装饰的函数,

实例方法:类内部定义的没有装饰器且第一个参数为self的函数


9:generator

generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。


10:可以迭代和迭代器:

Pythonlisttruplestrdict这些都可以被迭代,但是它们不是迭代器。因为和迭代器相比有一个很大的不同,list/truple/map/dict这些数据的大小是确定的,也就是说有多少事可知的。但迭代器不是,迭代器不知道要执行多少次,所以可以理解为不知道有多少个元素,每调用一次next(),就会往下走一步,是惰性的。

判断是不是可以迭代,用Iterable

判断是不是迭代器,用Iterator

凡是可以for循环的,都是Iterable

凡是可以next()的,都是Iterator

集合数据类型如listtrupledictstr,都是Itrable不是Iterator,但可以通过iter()函数获得一个Iterator对象,Python中的for循环就是通过next实现的

it =iter([1,2,3,4,5])


11:匿名函数

匿名函数lambdax: x * x

关键字lambda表示匿名函数,冒号前面的x表示函数参数。

list(map(lambdax: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]))

用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数:

f = lambdax: x * x

print(f)

print(f(3))


12:路径

l =os.path.join(os.path.abspath(__file__), 'plu', 'sec'),参数组合路径

os.listdir(l)列出当前目录下的全部目录和文件,不递归。

os.path.split():将文件名和路径分割开。


13:动态加载module,__import__

调用:obj= __import__('first.mess', None, None, ['dimy', 'fib'], 0)

第一个参数时package,4个参数时一个list,里面是你要取得module

a =getattr(obj, 'dimy')

#a.test()

b =getattr(obj, 'fib')

#b.fib(0)

这样就可以动态加载module了。


14:Python中的数字

整型(Int)- 通常被称为是整型或整数,是正或负整数,不带小数点。

长整型(longintegers) - 无限大小的整数,整数最后是一个大写或小写的L

浮点型(floatingpoint real values) - 浮点型由整数部分与小数部分组成,浮点型也可以使用科学计数法表示(2.5e2= 2.5 x 102 = 250

复数(complexnumbers) - 复数由实数部分和虚数部分构成,可以用a+ bj,或者complex(a,b)表示,复数的实部a和虚部b都是浮点型。

需要注意的是虽然长整型理论上是无限大小的数,但是数字还是要存储在内存中,所以这时就和存储方式和存储大小有关了。而整形的大小主要区别是32位机和64位机。



15Python类型转换

int(x[,base ]) x转换为一个整数

long(x[,base ]) x转换为一个长整数

float(x) x转换到一个浮点数

complex(real[,imag ]) 创建一个复数

str(x ) 将对象x 转换为字符串

repr(x ) 将对象x 转换为表达式字符串

eval(str) 用来计算在字符串中的有效Python表达式,并返回一个对象

tuple(s) 将序列s 转换为一个元组

list(s ) 将序列s 转换为一个列表

chr(x ) 将一个整数转换为一个字符

unichr(x) 将一个整数转换为Unicode字符

ord(x ) 将一个字符转换为它的整数值

hex(x ) 将一个整数转换为一个十六进制字符串

oct(x ) 将一个整数转换为一个八进制字符串


15Python不支持重载

原因:重载的目的:1是参数数量可变,2是参数类型可变

Python的语法本来就支持这两种


16:捕获错误信息

print(traceback.print_exc())



ps

os.system(command),传入命令字符串,执行系统命令

repr(object),输入对象返回字符串,repr(e),获得较多的错误信息



阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页