![商品期货量化交易实战:以Python为工具](https://wfqqreader-1252317822.image.myqcloud.com/cover/372/43738372/b_43738372.jpg)
2.2 Python的基础语法
Python与C语言、Java有很多相似之处,但比这两种语言更简洁。Python的变量无须声明,可以直接给变量赋值。Python的代码块强制以Tab键或4个空格缩进,用于区分代码之间的层次。
2.2.1 编码
Python可以在代码文件开头设置编码格式,如果不设置,则默认采用UTF-8编码格式。除非有特殊需要,一般不用设置。将编码格式设置为cp-1252的代码如下:
![](https://epubservercos.yuewen.com/F058EB/23020652409767806/epubprivate/OEBPS/Images/42673_38_1.jpg?sign=1739025931-bpDc1l9gkyeC0dsotjiNqnHOoB0ogX3c-0-b73788125e387e481c74b30fa81c864c)
2.2.2 变量命名
顾名思义,变量就是可以变化的量,它就像一个盒子,里面可以存储各种东西。在给变量命名时,需要遵守Python变量的命名规则。Python变量的命名规则如下:
● 变量名是区分大小写的。
● 变量名只能由字母、数字、下画线组成,并且不能以数字开头。
● 变量名中不能包含空格。
● Python的关键字和函数名不能作为变量名。
● 避免使用小写字母l和大写字母O,因为可能会错看成1和0。
根据Python变量的命名规则,定义一个字符串变量,代码如下:
![](https://epubservercos.yuewen.com/F058EB/23020652409767806/epubprivate/OEBPS/Images/42673_39_1.jpg?sign=1739025931-NRhaAUOVKG8MxsSyIb64UCAsfW4qhueX-0-7f09638cad4c293281450a5f744d9667)
注意:在给Python变量赋值时不需要声明变量类型。在使用该变量前,必须对其赋值,在赋值之后,变量才会被创建。
2.2.3 关键字
在使用Python编写代码时,有一些特殊的单词是不能作为变量名、函数名的,这些单词称为关键字或保留字。Python自带的keyword模块可以输出这些关键字,代码如下:
![](https://epubservercos.yuewen.com/F058EB/23020652409767806/epubprivate/OEBPS/Images/42673_39_2.jpg?sign=1739025931-ZI7LDEMlHm5pTuTSryxmXKczBKpGRZZr-0-acd576ecada55f2c47ad08b2e49cb3c7)
输出结果如下:
![](https://epubservercos.yuewen.com/F058EB/23020652409767806/epubprivate/OEBPS/Images/42673_39_3.jpg?sign=1739025931-zmLwkbZ6aoD19LyqtBLTcDw0fDfn1fod-0-48a721b9dfab0a4496393cfaeac53271)
注意:'False'、'None'和'True'等单词是预先保留的关键字,不能再用作其他变量或函数的名称。此外,Python是一种动态语言,关键字会随着时间的变化而变化。
2.2.4 注释
为了提高代码的可读性,可以在代码中添加注释进行说明。良好的代码注释可以说明代码作用和上下文关系,便于理解策略逻辑,方便日后维护策略。Python的单行注释由一个“#”符号开头,后面跟上注释文本,示例代码如下:
![](https://epubservercos.yuewen.com/F058EB/23020652409767806/epubprivate/OEBPS/Images/42673_40_1.jpg?sign=1739025931-p3T8XlN1sGEc0qFxtERCfM8skVuJhRww-0-6ddcf66b3fcfa70a6ce200f6b8731d1f)
如果注释的内容较多,则可以使用多行注释。多行注释会在注释文本前、后各使用3个连续的单引号'''或3个连续的双引号""",语法格式如下(可以用多行注释符号注释单行代码):
![](https://epubservercos.yuewen.com/F058EB/23020652409767806/epubprivate/OEBPS/Images/42673_40_2.jpg?sign=1739025931-afHltIF7zLnt2TfD5RwdNL2vYHWz28CF-0-b1e3f71da5e06ff5eed499926920ddb5)
程序在运行时会忽略已经被注释的代码,所以基本不会影响代码的运行速度。除此之外,注释可以帮助调试程序BUG,如果觉得某段代码有问题,则可以先将这段代码注释掉,然后再次运行程序,如果可以正常运行,则说明BUG是由这段代码引起的。合理地利用注释,可以缩小BUG的范围,提高调试策略的效率。
2.2.5 缩进
Python的缩进是一种独特的语法格式,也是该语言的一个特点,与其他语言使用花括号“{}”分隔代码块不同,Python使用Tab键或4个空格进行代码缩进,从而控制代码的作用域,相同缩进的代码处于同一个作用域内。
![](https://epubservercos.yuewen.com/F058EB/23020652409767806/epubprivate/OEBPS/Images/42673_40_3.jpg?sign=1739025931-1Qrowkq0OSHqtq6Nu3D4gaydPqdf1ZhZ-0-a26ec912b28b59ca1486636e2e30f8ae)
注意:在上述代码中,空格和Tab键缩进不能混合使用,否则会报错。在使用空格缩进时,如果空格数量不一致,也会报错。
2.2.6 代码块
缩进相同的一组语句构成一个代码块。在使用while、def、class、if等关键字时,在英文冒号“:”后换行。一个正确的缩进代码示例如下:
![](https://epubservercos.yuewen.com/F058EB/23020652409767806/epubprivate/OEBPS/Images/42673_40_4.jpg?sign=1739025931-R6dd9HhjMWMBWZPZZHkRwhUbTW6jheTX-0-7a73c1d29dd066f64f4903860db065ab)
![](https://epubservercos.yuewen.com/F058EB/23020652409767806/epubprivate/OEBPS/Images/42673_41_1.jpg?sign=1739025931-JzuUey9oJhyAp27coJuwi0p3hWzNCYU2-0-35650c747eb6bcf4c60d4525023a0d78)
输出结果如下:
![](https://epubservercos.yuewen.com/F058EB/23020652409767806/epubprivate/OEBPS/Images/42673_41_2.jpg?sign=1739025931-EZOiSiz9V1wm6QuoRupHN27potTYTpqe-0-94cf4ad470d5f6405b8504e6fb9c5574)
在上述代码中,每一个if语句中都有一个作用域,如果if语句为真,则执行if语句作用域内的代码;如果if语句为假,则跳过if语句作用域内的代码。
2.2.7 空行
在编写代码时,通常会在函数之间使用空行分隔,表示新的一段代码。这个并不是语法,仅仅是编写策略时的习惯,便于之后阅读代码,其主要作用是分隔两段功能或含义不同的代码。
2.2.8 导入模块
模块就像已经制造好的汽车零部件,通过生产线将各个零件组装成一个整体。编程也是同样的道理,在编写策略时,可以使用“import”导入模块,从而提高策略开发效率。通常将模块写在代码开头,有以下4种形式。
● 导入整个模块,语法格式如下:
![](https://epubservercos.yuewen.com/F058EB/23020652409767806/epubprivate/OEBPS/Images/42673_41_3.jpg?sign=1739025931-abgoaU01LHjUboNJGjpE2qFb7YGqj5Df-0-cfa97d73f9fbbaddc6ab573a86b844d3)
● 导入某个模块中的某个函数,语法格式如下:
![](https://epubservercos.yuewen.com/F058EB/23020652409767806/epubprivate/OEBPS/Images/42673_41_4.jpg?sign=1739025931-TcSav32VHtM4eDucdtJEsVQwVO32Cgen-0-a2592986cdd0b45f0a8c552b649d6d5a)
● 导入某个模块中的多个函数,语法格式如下:
![](https://epubservercos.yuewen.com/F058EB/23020652409767806/epubprivate/OEBPS/Images/42673_41_5.jpg?sign=1739025931-4fWJIjBqiK19108beSN8GFddee7sFSpz-0-4395b79657c13ef76e921f5f165d3cff)
● 导入某个模块中的所有函数,语法格式如下:
![](https://epubservercos.yuewen.com/F058EB/23020652409767806/epubprivate/OEBPS/Images/42673_41_6.jpg?sign=1739025931-2FZfN0JUW2cFKc0FoRzrfMt9maY5IfCA-0-ec5bedf9174cea6cb6e71533d001a487)