![商品期货量化交易实战:以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=1738885479-u16ShqsSvcRhSCbU3V5ofVTtxuml9iJw-0-1124afdc5ccd34bc0c5b53ee5f40f9cf)
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=1738885479-PGooXrWkD2Z9VOrNxUJHjLhWTn7yrNno-0-98a5938b181650ab07741f37a3b2d702)
注意:在给Python变量赋值时不需要声明变量类型。在使用该变量前,必须对其赋值,在赋值之后,变量才会被创建。
2.2.3 关键字
在使用Python编写代码时,有一些特殊的单词是不能作为变量名、函数名的,这些单词称为关键字或保留字。Python自带的keyword模块可以输出这些关键字,代码如下:
![](https://epubservercos.yuewen.com/F058EB/23020652409767806/epubprivate/OEBPS/Images/42673_39_2.jpg?sign=1738885479-KV3JCuKQSL4IyoX5t9kgv5LEViUijaGB-0-509872d64c1791195f649a0d2e897c65)
输出结果如下:
![](https://epubservercos.yuewen.com/F058EB/23020652409767806/epubprivate/OEBPS/Images/42673_39_3.jpg?sign=1738885479-vaWmWqQlBH2KXrFI8xLuvMytfXKEIYfQ-0-36f1505a5d5ddf20c8036bf1f948a4ed)
注意:'False'、'None'和'True'等单词是预先保留的关键字,不能再用作其他变量或函数的名称。此外,Python是一种动态语言,关键字会随着时间的变化而变化。
2.2.4 注释
为了提高代码的可读性,可以在代码中添加注释进行说明。良好的代码注释可以说明代码作用和上下文关系,便于理解策略逻辑,方便日后维护策略。Python的单行注释由一个“#”符号开头,后面跟上注释文本,示例代码如下:
![](https://epubservercos.yuewen.com/F058EB/23020652409767806/epubprivate/OEBPS/Images/42673_40_1.jpg?sign=1738885479-tA3HEvT9EJ4YWlmVvYdUslPm8LZ3tpr5-0-e5fcdce64c4331581be7196b50c58218)
如果注释的内容较多,则可以使用多行注释。多行注释会在注释文本前、后各使用3个连续的单引号'''或3个连续的双引号""",语法格式如下(可以用多行注释符号注释单行代码):
![](https://epubservercos.yuewen.com/F058EB/23020652409767806/epubprivate/OEBPS/Images/42673_40_2.jpg?sign=1738885479-8CT9Z5slMtBEx88ftg5VJAKSPmSBo2wp-0-92a24df699d9b0d4422b029a85ea728f)
程序在运行时会忽略已经被注释的代码,所以基本不会影响代码的运行速度。除此之外,注释可以帮助调试程序BUG,如果觉得某段代码有问题,则可以先将这段代码注释掉,然后再次运行程序,如果可以正常运行,则说明BUG是由这段代码引起的。合理地利用注释,可以缩小BUG的范围,提高调试策略的效率。
2.2.5 缩进
Python的缩进是一种独特的语法格式,也是该语言的一个特点,与其他语言使用花括号“{}”分隔代码块不同,Python使用Tab键或4个空格进行代码缩进,从而控制代码的作用域,相同缩进的代码处于同一个作用域内。
![](https://epubservercos.yuewen.com/F058EB/23020652409767806/epubprivate/OEBPS/Images/42673_40_3.jpg?sign=1738885479-8LYU8hytH7u1kVy9B7dEygRWswFTBZFb-0-40b402655b1f995b254d12dae661a8e9)
注意:在上述代码中,空格和Tab键缩进不能混合使用,否则会报错。在使用空格缩进时,如果空格数量不一致,也会报错。
2.2.6 代码块
缩进相同的一组语句构成一个代码块。在使用while、def、class、if等关键字时,在英文冒号“:”后换行。一个正确的缩进代码示例如下:
![](https://epubservercos.yuewen.com/F058EB/23020652409767806/epubprivate/OEBPS/Images/42673_40_4.jpg?sign=1738885479-RmUv9Ry5Rn9NYKyYrUklk3X2Na9wJEQs-0-e837c3679fadcab064ec20913feb3101)
![](https://epubservercos.yuewen.com/F058EB/23020652409767806/epubprivate/OEBPS/Images/42673_41_1.jpg?sign=1738885479-awwqAthiKk7NROOy6UumYBUoLsxrfaFy-0-4aac5484833a27d8e81984078f89c67f)
输出结果如下:
![](https://epubservercos.yuewen.com/F058EB/23020652409767806/epubprivate/OEBPS/Images/42673_41_2.jpg?sign=1738885479-b0BjVXVFWgaardId6znEF7dWuBkUgw1W-0-e74abca08e544c9d35433bf320249a69)
在上述代码中,每一个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=1738885479-FAjOIZhDQc6etZY9utS23B2pqujJ96Je-0-c67b3a962804af9c96cd7c9763fda98d)
● 导入某个模块中的某个函数,语法格式如下:
![](https://epubservercos.yuewen.com/F058EB/23020652409767806/epubprivate/OEBPS/Images/42673_41_4.jpg?sign=1738885479-hHY6mXRRr8lKUsVa3XOkRrMGkaK9LKst-0-0390e664bb42d8b922fb97775167088c)
● 导入某个模块中的多个函数,语法格式如下:
![](https://epubservercos.yuewen.com/F058EB/23020652409767806/epubprivate/OEBPS/Images/42673_41_5.jpg?sign=1738885479-UxsW70vjvphNLhG0itId3vU1Wl2sfeXi-0-80fd5670379bb188264c07ea1870e81f)
● 导入某个模块中的所有函数,语法格式如下:
![](https://epubservercos.yuewen.com/F058EB/23020652409767806/epubprivate/OEBPS/Images/42673_41_6.jpg?sign=1738885479-W8uAZ3Sjz1hln3Gg7iBlyo2AQlOZdfiy-0-0dbef910782b4ed591053c5fd0cd0fbe)