第二天:
由于习惯了使用VS工具进行单步或逐句调试程序,所以先查了一下资料,使用pycharm是如何调试的:
其实本人还是喜欢用spider,可能是习惯问题:
例子还是用昨天的例子
在例子代码开头即是from xxx import xxx,其实这相当于C语言或其它语言的头文件包含的作用,在任何一种编程语言来说,任何函数都必须先定义或先声明后定义之后,才能被调用,python也不例外,所以需要用到什么东西,都需要先包含进来,而python中需要使用内置库也好,第三方库也好,都必须先导入。
这个“库”其实就是一些源码文件,如自己写个文件“Hello.py”
由于这个文件名,也就相当于后面需要导入的包名,与包中的函数名一致,如果在使用时,只写“import Hello”,默认导入的是整个包,而不是指的Hello函数
所以如果要使用里面的函数,调用方法即为:Hello.Hello()
如果一个包中包含多个函数(经常都是这样)
这样的话,我们可以整个包都导入,或者导入某些需要的函数,没有导入的函数即不可用,从下图可以看得出来,Hello1被执行之后,在Hello2被调用的时候才报错,也就证明了python的解释性语言的特性,也就是脚本语言的特性。
以上是大概的解释一下python中包的概念。
//*********************************************************下面开始例子中的代码逐句逐行来学习。
在这里解释一下为什么这么个小例子就需要逐句逐行来学习。由于本人读的是“英语教育”专业,回想以前学习英语单词的方法就是简单的“查字典”,碰到哪个单词不懂了,就去查,然后看英语的解释,如果解释中又有不懂的单词,则再去查,直到查到没有不认识的单词为止,这样的方法就相当于计算机中的迭代递归一样,方法是很笨,但很实用。由于Python语言本身没有系统的学习过,也在大概的看过一些教学视频而已,但总觉得这些视频都只注意一些语法上面,很少会讲得很透彻,所以也就放弃看这些视频了,所以现在这就是我想要做的,从BackTrader的说明手册开始,看懂里面的例子之后,要使用的话就不难了。so here we go .
**
from future import (absolute_import, division, print_function,unicode_literals)
**
absolute_import:顾名思义为:加入绝对引入这个新特性。
说到绝对引入,当然就会想到相对引入。那么什么是相对引入呢?
其实个个引入,可以理解成绝对路径和相对路径的区别,例如C/C++语言中的头文件包含一样,#include""与#include<>的区别就是头文件查找路径先后的问题而已,所以就不过多介绍了。
division:导入python未来支持的语言特征division(精确除法)。
当我们没有在程序中导入该特征时,"/“操作符执行的是截断除法(Truncating Division),当我们导入精确除法之后,”/"执行的是精确除法,如下所示:
3/4
0from future import division
3/4
0.75
当我们导入精确除法后,若要执行截断除法,可以使用"//"操作符:3//4
0
print_function:导入python未来支持的print函数。
python2.7
print “Hello world”
python3
print(“Hello world”)
unicode_literals:
① Python的每个新版本都会增加一些新的功能,或者对原来的功能作一些改动。有些改动是不兼容旧版本的,也就是在当前版本运行正常的代码,到下一个版本运行就可能不正常了
② 从python 2.7到Python 3.x就有不兼容的一些改动,比如2.x里的字符串用’xxx’表示str,Unicode字符串用u’xxx’表示unicode,而在3.x中,所有字符串都被视为unicode,因此,写u’xxx’和’xxx’是完全一致的,而在2.x中以’xxx’表示的str就必须写成b’xxx’,以此表示“二进制字符串”。
要直接把代码升级到3.x是比较冒进的,因为有大量的改动需要测试。相反,可以在2.7版本中先在一部分代码中测试一些3.x的特性,如果没有问题,再移植到3.x不迟。
③ Python提供了__future__模块,把下一个新版本的特性导入到当前版本,于是我们就可以在当前版本中测试一些新版本的特性。举例说明如下:
④ 为了适应Python 3.x的新的字符串的表示方法,在2.7版本的代码中,可以通过unicode_literals来使用Python 3.x的新的语法:在python3中默认的编码采用了unicode, 并取消了前缀u. 如果代码要兼容python2/3
所以,导入-from future import unicode_literals目的在于做版本的兼容性
**
import backtrader as bt
**
这句貌似不用解释了。
**
if name == ‘main’:
**
首先需要了解 name 是属于 python 中的内置属性,就是它会天生就存在于一个 python 程序中,代表对应程序名称。
比如所示的一段代码里面(这个脚本命名为 xxx.py),我只设了一个函数,但是并没有地方运行它,所以当 run 了这一段代码之后我们有会发现这个函数并没有被调用。但是当我们在运行这个代码时这个代码的 name 的值为 main (一段程序作为主线运行程序时其内置名称就是 main)。