pythonsicp
1. 学python对金融有用吗
链接:http://pan..com/s/1djPqbCXnQrRpW0dgi2MCJg
华尔街学堂 python金融实务从入门到精通。最近,越来越多的研究员、基金经理甚至财务会计领域的朋友,向小编咨询:金融人需要学Python么?事实上在现在,这已经不是一个问题了。Python已成为国内很多顶级投行、基金、咨询等泛金融、商科领域的必备技能。中金公司、银河证券、南方基金、银华基金在招聘分析师岗位时,纷纷要求熟练掌握Python数据分析技能。
课程目录:
Python在金融资管领域中的应用
安装anaconda步骤
Python基础知识
Python基础金融分析应用
成为编程能手:Python知识进阶
利用Python实现金融数据收集、分析与可视化
......
2. 精通Python需要多长时间
我认为“精通”要满足如下条件:
熟知主流硬件体系(x86, x64)
熟知 CPython 的具体实现,如若可能至少通读源码三遍以上
熟知每条 Python bytecode 如何被解释执行
熟知每条 Python 语句如何 compile 成 bytecode
熟知 Python 主要数据结构所采用的优化手段
熟知 JIT 以及哪些场合下 PyPy 会比 CPython 有较大性能提高、以及有什么代价
所以我一直只敢称自己为 “中级 Pythonista”。对于那些仅仅知道怎么用 Python 就敢自称“精通”的人:专家不是那么好当的,没有金刚钻别揽瓷器活。不懂那么多底层细节就不要随便说自己“精通”,说自己“擅长”不会被人看不起。
@米嘉 引用的 StackOverflow 上列的那几项条件是作为将 Python 用于主要工作语言所需要的基本条件,敢于因此而称自己“精通 Python”要让不少人笑掉大牙。况且那几项还有几个严重问题:
第3点:如若可能,尽量避免 map/rece/fitler,而用 list/generator/set comprehension,代码要清晰得多,GvR 如此说。xrange 和 range 的区别在 Python 3 中马上就要滚蛋了,所以如非必要,不要大量使用 xrange。
第5点:敢于在 CPython 中大量使用递归是对 CPython 实现的公然侮辱。Python 的多个稳定实现都没有 TCO,递归会让性能迅速下降。记住一点:Python 中函数调用非常昂贵,可读性、可维护性影响不大的情况下,能展开函数调用的时候尽量展开、递归能转化成循环的尽量转化。递归也不是人类自然的思考方式。
第7点:看书是对的,但不要把 Python 当作一门经典函数式语言对待,因为它不是。你当它是,它会很痛苦(“为毛要这样滥用我!?”),你也会很痛苦(“为毛你不这样实现 blah blah!?”)。SICP 是本好书,但不要因此而教条。要清楚的知道什么时候用函数式,什么时候用面向对象,什么时候用面向过程,什么时候用面向任务,什么时候用面向结果。在一棵树上吊死是大多数非理性死忠的表现。
3. 编程零基础学习如何入手
长大不会做这行但希望精通,无意冒犯,这说明你必须是个天才。
一般推荐都会推荐直接上手跑 Python、R、JS 之类的高级语言,但是对于你,我建议你去买一本 SICP 和 CSAPP 来看,这正是计算机的三大神书之二。
然后在 SICP 中你会学习到 lisp 编程语言和程序设计的思想。
在 CSAPP 中你会学习到 C 语言,并理解计算机是如何运行的,计算机操作系统是怎样运作的。
读完这两本书后,你就完美的打下了根基,这时候其他的什么网站啊,游戏啊,你都能轻易的在几周之内掌握并做出来。
这个时候,计算机水平算是登堂入室。
之后你可以去创作或者是去对那些开源的软件、语言、系统做出你自己的贡献,在那个时候你就算是精通啦~
4. 如何调式python程序
程序能一次写完并正常运行的概率很小,基本不超过1%。总会有各种各样的bug需要修正。有的bug很简单,看看错误信息就知道,有的bug很复杂,我们需要知道出错时,哪些变量的值是正确的,哪些变量的值是错误的,因此,需要一整套调试程序的手段来修复bug。
第一种方法简单直接粗暴有效,就是用print把可能有问题的变量打印出来看看:
# err.py
def foo(s):
n = int(s)
print '>>> n = %d' % n
return 10 / n
def main():
foo('0')
main()
执行后在输出中查找打印的变量值:
$ python err.py
>>> n = 0
Traceback (most recent call last):
...
ZeroDivisionError: integer division or molo by zero
用print最大的坏处是将来还得删掉它,想想程序里到处都是print,运行结果也会包含很多垃圾信息。所以,我们又有第二种方法。
断言
凡是用print来辅助查看的地方,都可以用断言(assert)来替代:
# err.py
def foo(s):
n = int(s)
assert n != 0, 'n is zero!'
return 10 / n
def main():
foo('0')
assert的意思是,表达式n != 0应该是True,否则,后面的代码就会出错。
如果断言失败,assert语句本身就会抛出AssertionError:
$ python err.py
Traceback (most recent call last):
...
AssertionError: n is zero!
程序中如果到处充斥着assert,和print相比也好不到哪去。不过,启动Python解释器时可以用-O参数来关闭assert:
$ python -O err.py
Traceback (most recent call last):
...
ZeroDivisionError: integer division or molo by zero
关闭后,你可以把所有的assert语句当成pass来看。
logging
把print替换为logging是第3种方式,和assert比,logging不会抛出错误,而且可以输出到文件:
# err.py
import logging
s = '0'
n = int(s)
logging.info('n = %d' % n)
print 10 / n
logging.info()就可以输出一段文本。运行,发现除了ZeroDivisionError,没有任何信息。怎么回事?
别急,在import logging之后添加一行配置再试试:
import logging
logging.basicConfig(level=logging.INFO)
看到输出了:
$ python err.py
INFO:root:n = 0
Traceback (most recent call last):
File "err.py", line 8, in <mole>
print 10 / n
ZeroDivisionError: integer division or molo by zero
这就是logging的好处,它允许你指定记录信息的级别,有debug,info,warning,error等几个级别,当我们指定
level=INFO时,logging.debug就不起作用了。同理,指定level=WARNING后,debug和info就不起作用了。这样一
来,你可以放心地输出不同级别的信息,也不用删除,最后统一控制输出哪个级别的信息。
logging的另一个好处是通过简单的配置,一条语句可以同时输出到不同的地方,比如console和文件。
pdb
第4种方式是启动Python的调试器pdb,让程序以单步方式运行,可以随时查看运行状态。我们先准备好程序:
# err.py
s = '0'
n = int(s)
print 10 / n
然后启动:
$ python -m pdb err.py
> /Users/michael/Github/sicp/err.py(2)<mole>()
-> s = '0'
以参数-m pdb启动后,pdb定位到下一步要执行的代码-> s = '0'。输入命令l来查看代码:
(Pdb) l
1 # err.py
2 -> s = '0'
3 n = int(s)
4 print 10 / n
[EOF]
输入命令n可以单步执行代码:
(Pdb) n
> /Users/michael/Github/sicp/err.py(3)<mole>()
-> n = int(s)
(Pdb) n
> /Users/michael/Github/sicp/err.py(4)<mole>()
-> print 10 / n
任何时候都可以输入命令p 变量名来查看变量:
(Pdb) p s
'0'
(Pdb) p n
0
输入命令q结束调试,退出程序:
(Pdb) n
ZeroDivisionError: 'integer division or molo by zero'
> /Users/michael/Github/sicp/err.py(4)<mole>()
-> print 10 / n
(Pdb) q
这种通过pdb在命令行调试的方法理论上是万能的,但实在是太麻烦了,如果有一千行代码,要运行到第999行得敲多少命令啊。还好,我们还有另一种调试方法。
pdb.set_trace()
这个方法也是用pdb,但是不需要单步执行,我们只需要import pdb,然后,在可能出错的地方放一个pdb.set_trace(),就可以设置一个断点:
# err.py
import pdb
s = '0'
n = int(s)
pdb.set_trace() # 运行到这里会自动暂停
print 10 / n
运行代码,程序会自动在pdb.set_trace()暂停并进入pdb调试环境,可以用命令p查看变量,或者用命令c继续运行:
$ python err.py
> /Users/michael/Github/sicp/err.py(7)<mole>()
-> print 10 / n
(Pdb) p n
0
(Pdb) c
Traceback (most recent call last):
File "err.py", line 7, in <mole>
print 10 / n
ZeroDivisionError: integer division or molo by zero
这个方式比直接启动pdb单步调试效率要高很多,但也高不到哪去。
IDE
如果要比较爽地设置断点、单步执行,就需要一个支持调试功能的IDE。目前比较好的Python IDE有PyCharm:
5. 求推荐一本大学Python教材
《Python编程:从入门到实践》
2016年出版的书,基于 Python3.5 同时也兼顾 Python2.7,书中涵盖的内容是比较精简的,没有艰深晦涩的概念。
每个小结都附带练习题,它可以帮助你更快的上手编写程序,解决实际编程问题。
上到有编程基础的程序员,下到10岁少年,想入门Python并达到可以开发实际项目的水平,这本书都是不错的选择。
6. python对金融有用吗
在过去的十年里,随着自动化技术的出现,科技最终成为杰出的金融机构,银行,保险和投资公司,股票交易公司,对冲基金,券商等公司的一部分。根据2013年的Crosman 报告,与2013年相比,银行和金融公司2014年在科技上的花费要高出4.2%。预计在2020年,一年的金融服务的技术成本将达到5亿美元。正值系统需要维护和不断升级的时候,一些着名的银行雇佣一些开发者是很正常的事情。那么Python用在哪里呢?(推荐学习:Python视频教程)
Python的语法很容易实现那些金融羡衫算法和数学计算,每个数学语句都能转变成一行Python代码,每行允许超过十万的计算量。
没有其他语言能像Python这样适用于数学,Python精通于计算,以及数学和科学中的排列组合问题。
Python的第二个特性是表示数字,序列和算法。比如SciPy库,很适合用来做技术领域和科学领域的计算,SicPy库被很多工程师,科学家和分析人员使用。
NumPy,也是Python的一个扩展,它可以很好地处理数学函数,数组和矩阵。同时,Python也支持严格的编码模式,因此,使它成为一个平衡的选择,或者说方法。
使用更少的人达到相同的结果以及实现其他编程语言不能实现的事,是Python首要的优点。Python语法的精确和简洁,以及它大桥神量宝贵的第三方工具使它成为处理金融行业的错综复杂的事敏派亏务的唯一可靠的选择。
Cititec(英格兰伦敦的职业介绍所)的技术招聘经理Stephen Grant说:跨市场风险管理和交易系统都在使用Python(有时会混合使用c++),很多银行从建立银行的前端到资产风险系统都会选择使用Python。使用Python的金融公司包括荷兰银行,德国证券交易所集团,Bellco信用社,摩根大通以及阿尔蒂斯投资管理。
更多Python相关技术文章,请访问Python教程栏目进行学习!以上就是小编分享的关于python对金融有用吗的详细内容希望对大家有所帮助,更多有关python教程请关注环球青藤其它相关文章!
7. 怎样才能算是熟悉python会什么具体。招聘网页上写着熟悉python.高手,指导,谢谢。
熟知主流硬件体系(x86, x64)
熟知 CPython 的具体实现,如若可能至少通读源码三遍以上
熟知每条 Python bytecode 如何被解释执行
熟知每条 Python 语句如何 compile 成 bytecode
熟知 Python 主要数据结构所采用的优化手段
熟知 JIT 以及哪些场合下 PyPy 会比 CPython 有较大性能提高、以及有什么代价
所以我一直只敢称自己为 “中级 Pythonista”。对于那些仅仅知道怎么用 Python 就敢自称“精通”的人:专家不是那么好当的,没有金刚钻别揽瓷器活。不懂那么多底层细节就不要随便说自己“精通”,说自己“擅长”不会被人看不起。
@米嘉 引用的 StackOverflow 上列的那几项条件是作为将 Python 用于主要工作语言所需要的基本条件,敢于因此而称自己“精通 Python”要让不少人笑掉大牙。况且那几项还有几个严重问题:
第3点:如若可能,尽量避免 map/rece/fitler,而用 list/generator/set comprehension,代码要清晰得多,GvR 如此说。xrange 和 range 的区别在 Python 3 中马上就要滚蛋了,所以如非必要,不要大量使用 xrange。
第5点:敢于在 CPython 中大量使用递归是对 CPython 实现的公然侮辱。Python 的多个稳定实现都没有 TCO,递归会让性能迅速下降。记住一点:Python 中函数调用非常昂贵,可读性、可维护性影响不大的情况下,能展开函数调用的时候尽量展开、递归能转化成循环的尽量转化。递归也不是人类自然的思考方式。
第7点:看书是对的,但不要把 Python 当作一门经典函数式语言对待,因为它不是。你当它是,它会很痛苦(“为毛要这样滥用我!?”),你也会很痛苦(“为毛你不这样实现 blah blah!?”)。SICP 是本好书,但不要因此而教条。要清楚的知道什么时候用函数式,什么时候用面向对象,什么时候用面向过程,什么时候用面向任务,什么时候用面向结果。在一棵树上吊死是大多数非理性死忠的表现。
8. Python 在编程语言中是什么地位为什么很多大学不教 Python
十分想炮轰一下,所谓“大学学习的基本设计思想,老师教授一两张语言即可,关键自己得去钻研,看自己喜欢什么就去多看多练习多钻研才可以”根本就站不住脚。首先,既然是教授一两门语言,为何这门语言是C而不是python?教授什么语言,跟你怎么才能把计算机语言写好跟你要钻研,完全就是两回事。(我并不否认强调学习要有钻研的精神,我十分认同在没有其他办法的情况下用这种论调来自我安慰,但是认为钻研的精神最重要,学习什么东西不重要,并不是一个让人停止思考的好答案) 从国内的计算机科学教育来看,“计算机语言”(Computer Language)其实从来没有获得很高的地位,在认知上就没有真正把计算机语言拉到一个较高的级别来看,相反的,可能还有鄙视代码,觉得语言只是知识的底层,不是上台面有得研究的东西。出现这种情况的原因我不大清楚,反正我身边很多的老师其实都是平时跑跑算法就行了——用自己用熟的C来跑,完全足够了。如果你的代码只是用来演示一个小程序的算法,实际上就是一个伪代码到可以编译的代码的转变,其实真的是没有多大区别了。 想想哪些老师在教计算机语言?基本都是教数据结构啊、算法啊之类的拉过来客串一下,这些老师往往没有面对复杂的系统的经验,也没有对一个有表达力的语言的需求在。而计算机语言的区别,所谓的表达力,优雅,抽象的角度,思维,全部都不是可以发到paper的东西,都是确确实实需要将语言工具用于应用和抽象才能体会到的。老师实际上一无使用一门好的语言的需求,二也很少做这些研究的。 计算机语言被拆成了很多门课,从语言、抽象和设计的角度来观察语言本身,大学应该是没有这种课程的。以我们学院来说,程序设计1根本就不是教程序设计,就是一个充水的C语言参考指导,程序设计2也不是教程序设计,就是一个充水的C++语言参考顺便教你用C++的OO语法来实现点数据结构和算法。你真正使用计算机语言是因为你要写数据结构和算法的作业。然后呢?因为要学计组你才需要学点汇编,一些老师可能对编程语言最大的体会是win32写个贪吃蛇。然后等到你大三了你学“编译原理”的时候是教你如何实现一个编译器(而不是如何设乎芹计一门语言,用语言来思考和抽象)。 大学既不是专才教育,也不是通才教育。大学是基本能力教育,它只有义务教会大多数学生在他专业领域中的基本能力。这句话本没有错,但是这句模糊的话,实际上却成为了放弃一个更好的选择的托词。大学当然不是专才教育,和型大学是基本能力教育也没有错,但是,使用C一定是掌握基本能力的最好选择吗?上面扯的“python不够clean”,“Python 的集成性并不比 C 好”也站不住脚。python在大部分情况下都比C要clean多了吧。。。大学教育哪里会在乎你的集成性。大家用 Python 是因为它的资源能够帮助很多人解决问题,这个大致我也认同。但是,python除了类库丰富,还是有很多好东西的。 从语言上看,python远远比C更适合教学啊。比如,python会让你的 1 < a < 2 是对的,不会让你栽入C的所谓的 (1<a) 是一个布尔值,然后跟2比较——这种设计真的是对的吗?人岁棚毕类真的就应该迁就这种设计吗?然后不要说 scanf("%d", &a) 这个a前面要加&这种了。你不是在学习程序语言设计,你是在学习如何躲开C的坑。。。好吧,你说学习C可以了解底层——你确认要在程序语言设计的课程里面来学习计算机底层真的很有意义而且值得坚持? 新人如果真的要学计算机语言的话,还是跟着MIT从python开始吧。不推荐C、不推荐C++、不推荐javascript、不推荐haskell、不推荐汇编、不推荐ruby,啃的下的可以试试看SICP里面的scheme,不然python也是个不错的选择。然后,C和C++一定要学好。。。haskell、lisp这些FP也挺有趣的可以看看。。。。不要挑热门的,不要挑应用广泛的,挑真的适合学习,能够启发你看到本质的。 ps:据说我院大三有门专选是python,然后还有haskell这种专选。了解了课程设计的动机和目的,其实这些都挺自然的。
9. 为什么很少有用lisp描述算法
虽然未必会用到 Lisp 作为开发语言,但并不妨碍我们学习、吸收其中优秀的思想。SICP 前两章分别介绍了对过程的抽象和对数据的抽象,其中一个重要的思想就是编码的本质是对计算过程的铅明描述,而这种描述并不拘泥于某种特定的语法或数据结皮激春构;对过程的抽象(例如(define (add a b) (+ a b)))与对数据的抽象(例如(define (make-leaf symbol weight) (list 'leaf symbol weight)))之间并没有本质的差异。
上面的代码大部分是在旅途中的火车或汽车上完成的,少有这样的机会体验一下离线编程的“乐趣”,sort 和 nonlocal 的用法还要多亏写 PyTips 时的总结,因此还是希望有时间可以写满 0xFF。