零基础学编程027:站在巨人的肩膀上
在《零基础学编程021:获取股票实时行情数据》这一节里,我们利用urllib抓取新浪财经中的股票数据,可以取出谷歌股票的开盘价,回顾一下代码:
import urllib.request as req
with req.urlopen('http://hq.sinajs.cn/list=gb_goog') as f :
hq = f.read().decode('GBK')
v = hq.split(',')
print(v[1])
但我们很多时候并不需要也不应该从零开始构建一个程序,大量的程序员已经构建了丰富的而且免费的模块供我们使用。编程领域中流行着一句非常有名的话,叫做“不要重复发明轮子(Don't Reinvent the Wheel)”,意思是说不要重新去写别人已经写好的、甚至已经优化过的基本函数。
程序员通常会看不起别人写的代码,所以重复发明了一个又一个的轮子,但他写的代码也好不到哪里去。因为一串代码从表面上看比较简单,但实际动手时会遇到许多复杂的情况,有时需要花费大量的时间才能让程序不出错,并且性能稳定。所以,如果有比较可信的代码库,又不侵犯版权的情况下,尽量还是用别人写好的代码库更能节省时间。
Python中已经建立了一个庞大的代码库社区,称作 Python Package Index,简称Pypi,网址:https://pypi.python.org。世界各地的程序员们已经贡献了无数的优秀的模块,在动手写一个程序时,记得到这个网站上搜一搜有没有可以直接拿来就用的函数,站在巨人们的肩膀上,写起程序来又快又好。
对于我们文章开头提到的功能,在Pypi中就有一个现成的提到股票行情的模块库,叫yahoo-finance,看看该模块库的简单帮助说明,几行代码就可以取出开盘价。这个代码库的优点在于还提供了几十个其它功能,包括取出历史行情数据,这个功能我们将来会用到。
from yahoo_finance import Share
openPrice = Share('goog').get_open()
print(openPrice)
对于新手来说,上面的代码一运行就会报错,是import语句执行的时候提示找不到yahoo_finance包。所以,最值得一提的是安装这个yahoo-finance模块库的过程,将来安装其它任何模块库也如法炮制即可。
如今的Python已经极大地简化了模块安装的过程,它就是 pip,在python2.7.9和python 3.4之后的安装版本中都已经内置了pip,只要有网络,安装任何模块库,一般只需要一个命令就可以搞定。
pip 是“Pip Installs Packages”的缩写,是一个专门用于管理Python软件包的程序,运行这条命令:
python -m pip install yahoo-finance
新手不知道在哪里运行上面那条命令,如果环境不正确(PATH环境变量问题),在cmd.exe黑窗口中运行也会出错。如果你安装了WinPython,则运行那个WinPython Command Prompt.exe,在这个黑窗口中执行pip命令即可。安装过程是全自动的,成功后会给出相应的提示。
小结:
- 不要重复发明轮子
- pypi中资源非常丰富
- pip用于安装其它模块库
--- END ---
- Hbase源码系列之BufferedMutator的Demo和源码解析
- Kafka源码系列之0.10版本的Producer源码解析及性能点讲解
- Spark源码系列之spark2.2的StructuredStreaming使用及源码介绍
- Hbase源码系列之scan源码解析及调优
- spark源码系列之内部通讯的三种机制
- Hbase源码系列之regionserver应答数据请求服务设计
- 大数据基础系列之kafkaConsumer010+的多样demo及注意事项
- 大数据基础系列之kafka011生产者缓存超时,幂等性和事务实现
- 大数据基础系列之提交spark应用及依赖管理
- 大数据集群安全系列之kafka使用SSL加密认证
- 基于zookeeper leader选举方式一
- Spark与mongodb整合完整版本
- spark源码系列之累加器实现机制及自定义累加器
- Scala语法基础之隐式转换
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- RCE远程控制Windows服务器——以win10虚拟机为例
- 解决InnoDB: Table mysql/innodb_index_stats has length mismatch
- R语言中对文本数据进行主题模型topic modeling分析
- QT学习第3天:QSlider使用方法
- qt学习第2天:QRadioButtonTest+ButtonGroup单选后提示消息,QComBox
- Python使用矩阵分解法找到类似的音乐
- SpringBoot集成ELK实现日志收集实践
- python在Scikit-learn中用决策树和随机森林预测NBA获胜者
- R语言:用R语言填补缺失的数据
- R语言如何和何时使用glmnet岭回归
- r语言中对LASSO回归,Ridge岭回归和Elastic Net模型实现
- cmd里如何查看历史命令并执行
- akka-typed(10) - event-sourcing, CQRS实战
- 【每日一题】37. Sudoku Solver
- A quick introduction to innodb_ruby (2.对innodb_ruby的简单介绍)