首门程序员理财课 Python量化交易系统实战

download: 首门程序员理财课 Python量化交易系统实战


这里我不评论 python 的一些有用的库或许框架,只从言语自身,最小支撑的状况下议论这门言语自身。言语的发展都是愈来愈接近Lisp,这也是Lisp这门言语巨大的缘由。html

下面我罗列一下我学习 python 的缘由:python

多编程范式
python是一门多范式的编程言语,所谓的进程式,面向目标和函数式的结合。程序员

大部分人接触编程言语都是从进程式开端的,缘由是由于进程式的程序办法与计算机运转办法是统一的,指令序列与运转进程是统一的。如典型的C,我也是从C开端学习的,进程式的程序言语设计编写程序较为简单,可是符合人机交互思考办法。编程

python虽然是一门面向目标言语,就连“ ”(空格)也可以看作是一个目标,可是python胜任进程式是没有问题的。markdown

如不需求运用类的静态办法:闭包

1 def a_plus_b(a,b):
2   return a+b并发

  1. Duck typing

Python在设计的时候将其做为一门面向目标的办法编写,且不说面向目标给软件设计带来的一些革命等,在python这样的动态言语中面向目标有一个亮点即是Duck typing(鸭子类型)。框架

关于鸭子类型,即是说,若是我认为一个笼统的东西会游泳会“嘎嘎”叫,我就可以把它做为鸭子。ide

1 def use_duck( Duck ):
2   Duck.swim()
3   Duck.gaga()
4
5 class Duck:
6   def swim(self):
7     ...
8   def gaga(self):
9     ...
若是这样运用:函数式编程

1 little_duck = Duck()
2 use_duck( little_duck )
关于Duck类,你可以给他取任何的姓名,或许承继它取另外一个姓名,只需求实现 swim() gaga() 你就可以把它做为鸭子。

关于鸭子类型,不少人不了解为何不需求供给一个接口来规定鸭子的行为,我既不支撑也不反对,个人观点是这样的:

对于参数的查看,不符合动态言语的特性
供给了接口规范,那就不是鸭子类型了,直接叫多态得了

  1. Python支撑的函数式编程

首先是lambda 演算。

函数式编程的定义是将函数看作是变量同样的待遇,变量在程序中最简单的有什么待遇呢?

可以赋值
可以做为参数
可以改动值(Erlang例外)
且不说生命周期了和做用域了
λ演算背后蕴含着计算机可计算性的深沉知识,lambda也是图灵模型,是停机问题的一个否认答案,不单单是一个匿名函数那样简单。

关于 lambda 演算,看看这个程序作了什么:

1 map(lambda n:2n,[1,2,3,4,5])
lambda n:2
n 自身做为一个匿名函数
lambda 自身做为一个参数传入 map()函数,这也即是说个人高阶函数,可以将函数变身当作是一个变量做为参数传递,这也是它做为函数遭到的高等待遇
关于赋值和改动值,两种办法:

f = fun() 不改动函数情况,只改动名称,可是说明函数是可以赋值的
可以运用闭包做为改动函数的情况办法,或许运用装饰器来完成函数情况改动
函数式编程的运用也可以提升程序的可读性和削减代码,并且可以清晰的表达函数的功用,如MapReduce即是来自函数式编程的思想:

1 Map(func,List)
做用是将func 做用于List中的每个元素。

以刚才的好比举例:

1 map(lambda n:2*n,[1,2,3,4,5])
此函数返回

1 [2,4,6,8,10]
重要的是在于知道这样的办法带给咱们的清晰的设计办法。

固然函数式编程不是那么几句话就说完的,了解函数式编程的中心是了解 λ演算。

一些有意思的特性

  1. 慵懒计算:

看看完成一个斐波那契数列 python 可以怎么作:

1 >>> def fib():
2 a , b = 0 ,1
3 while 1:
4 yield b
5 a , b = b ,a+b
6
7 >>> f = fib()
实际上由yield 生成了一个可迭代目标,每次调用f.next()就可以产生一个斐波那契值,而函数的内部情况是由迭代目标存储的。至于返回一个可迭代目标,若是需求确认迭代到多少位,可以运用 itertools.islice。

  1. 协程

协程也是一个基于yield的概念,首要的形式是微线程的协做式做业形式:

01 def coroutine(func):
02 def ret():
03 f = func()
04 f.next()
05 return f
06 return ret
07
08 @coroutine
09 def consumer():
10 print "Wait to getting a task"
11 while 1:
12 n = (yield)
13 print "Got %s",n
14
15 import time
16 def producer():
17 c = consumer()
18 while 1:
19 time.sleep(1)
20 print "Send a task to consumer"
21 c.send("task")
22
23 if name == "main":
24 producer()
协程带来的好处是可以直接调度你的线程,这也是它为何叫作协程而不是线程的缘由,线程属于抢占式并发,协程属于协做式并发。

动态言语带来的好处
从程序设计带来的快感(我相信只要酷爱这方面的人才有的感受)来讲,动态言语,好比python,节约了更多的时刻可以用来陪女友或许老婆,或许老公。

固然,做为互联网时代快速开发来讲,赶鸭子上线,也是《***与画家》上面介绍的,快速开发很重要,固然需求符合这方面的需求。

动态言语的CPU密集型运算一定比不过C/C++。

总之:人生苦短,我用python。

相关文章
相关标签/搜索