官术网_书友最值得收藏!

2.2 數據

數據分為字符串、數字、容器、布爾值和空值5種類型。在代碼里,數據是用變量存放的,而數據又有5種類型,所以在給變量取名時,建議用“變量名稱+數據類型”的形式,而且要記住數字不能放在變量名稱的開頭,Python是區分大小寫的。

2.2.1 字符串

字符串(String)是由數字、字母、下畫線組成的一串字符,用單引號(')或者雙引號(")括起來。字符串是不可改變類型的。

需要注意的是,Python 2默認的編碼格式是ASCII格式,只有在文件開頭加入“# encoding: UTF-8”,修改編碼格式才能正確地打印漢字,否則在讀取中文時會報錯。而Python 3源碼文件默認使用UTF-8編碼,所以可以正常解析中文。

    # 合約類型常量
    PRODUCT_EQUITY=u'股票'
    PRODUCT_FUTURES=u'期貨'
    PRODUCT_OPTION=u'期權'
    PRODUCT_INDEX=u'指數'
    PRODUCT_COMBINATION=u'組合'
    PRODUCT_FOREX=u'外匯'
    PRODUCT_UNKNOWN=u'未知'
    PRODUCT_SPOT=u'現貨'

Python支持使用反斜杠(\)轉義特殊字符,如表2-1所示。

表2-1 轉義特殊字符

在實際操作中,例如導入Excel表時,Excel表里的數據其實是字符串(String),必須轉換成數字數據類型才能進行下一步的數據分析。

2.2.2 數字

數字(Number)數據類型用于存儲數值。指定一個值時,Number對象就會被創建。數字數據類型一旦改變就會被分配一個新的對象。

數字數據類型分為兩種。

1.整數(int)

在32位系統上,整數的位數為32位,取值范圍為-231~231-1,即-2147483648~2147483647。在64位系統上,整數的位數為64位,取值范圍為-263~263-1,即-9223372036854775808~9223372036854775807。

2.浮點數(float)

浮點數用來處理實數,即帶有小數的數字。類似于C語言中的double類型,占8個字節(64位),其中52位表示底,11位表示指數,剩下的一位表示符號。

    #數據類型
    EMPTY_INT=0               #浮點型
    EMPTY_FLOAT=0.0          #整數型

    #交易所推送過來的TICK行情K線數據中,高開低收為浮點型,成交量為整數型
    open=EMPTY_FLOAT         #開盤價
    high=EMPTY_FLOAT         #最高價
    low=EMPTY_FLOAT          #最低價
    close=EMPTY_FLOAT        #收盤價

    volume=EMPTY_INT         # 成交量
    openInterest=EMPTY_INT  # 持倉量

2.2.3 容器

容器把不同的數據類型放在一起方便使用,根據用途不同可分為4種,分別是列表、元組、集合和字典。

1.列表

列表(List)可以完成大多數集合類的數據結構所實現的工作。列表中元素的類型可以不同,支持數字、字符串甚至可以包含列表(所謂嵌套)。列表是寫在方括號“[ ]”之間、用逗號分隔開的元素列表。和字符串一樣,列表同樣可以被索引和截取,列表被截取后返回一個包含所需元素的新列表。

      # 參數列表,保存了參數的名稱
      paramList=['name',
                'className',
                'author',
                'vtSymbol']

      # 變量列表,保存了變量的名稱
      varList=['inited',
              'trading',
              'pos']

      # 同步列表,保存了需要保存到數據庫的變量名稱
      syncList=['pos']

列表的基本操作包括查詢列表長度,增加、刪除和修改元素,以及進行正序和倒序查詢等。舉例說明如下。

(1)定義5個元素的列表。

    foodList=['腸粉’ , '糯米雞' , ‘馬蹄糕’,’雙皮奶‘,'鵪鶉蛋燒賣']
    正序            0         1              2              3              4
    倒序           -5        -4            -3            -2            -1

(2)通過正序和倒序來查詢列表元素。

    foodList=['腸粉’ , '糯米雞' , ‘馬蹄糕’,’雙皮奶‘,'鵪鶉蛋燒賣']

    foodList[4]    #查詢第5個元素
    >> '鵪鶉蛋燒賣'

    foodList[-1]   #查詢倒數第1個元素
    >> '鵪鶉蛋燒賣'

(3)查詢列表長度,增加、刪除和修改元素。

    # 1.查詢列表長度
    Len=len(foodList)
    Len
    >> 5

    # 2.列表操作:增加元素
    foodList.append('艇仔粥')
    foodList
    >> ['腸粉', '糯米雞', '馬蹄糕', '雙皮奶', '鵪鶉蛋燒賣', '艇仔粥']

    # 3.列表操作:刪除元素
    del foodList[2]    #刪除第3個元素
    foodList
    >> ['腸粉', '糯米雞', '雙皮奶', '鵪鶉蛋燒賣', '艇仔粥']

    # 4.列表操作:修改元素
    foodList[0]='豆漿'  #修改第1個元素為’豆漿’
    foodList
    >> ['豆漿', '糯米雞', '雙皮奶', '鵪鶉蛋燒賣', '艇仔粥']

(4)切片訪問,分別訪問前3個元素和后3個元素。

    # 1.訪問前3個元素
    foodList[0:3]
    >> ['豆漿', '糯米雞', '雙皮奶']

    # 2.簡化版訪問前3個元素
    foodList[:3]
    >> ['豆漿', '糯米雞', '雙皮奶']

    #  3.訪問后3個元素
    foodList[-3:]
    >> ['雙皮奶', '鵪鶉蛋燒賣', '艇仔粥']

2.元組

元組(Tuple)是一系列不可變的Python對象。元組是一種序列,就像列表一樣。元組和列表之間的主要區別是元組不能像列表那樣改變元素的值,可以簡單地理解為“只讀列表”。需要注意的是,元組使用小括號“( )”,而列表使用方括號“[ ]”,對比如下:

    # a.列表
    foodList=['腸粉’ , '糯米雞' , ‘馬蹄糕’,’雙皮奶‘,'鵪鶉蛋燒賣']

    # b.元組
    foodTup=('腸粉’ , '糯米雞' , ‘馬蹄糕’,’雙皮奶‘,'鵪鶉蛋燒賣')

3.集合

集合是一個無序不重復元素的序列。之前說的列表可以包括重復的元素,而集合是沒有重復元素的容器,用花括號“{ }”來表示集合,其操作如下:

    #定義集合,交易所
    ExchangeSets={'中金所','上期所','鄭商所','大商所','上交所','深交所'}
    print (ExchangeSets)
    >> {'上期所', '深交所', '鄭商所', '上交所', '中金所', '大商所'}

集合的基本功能是進行成員關系的測試,以及刪除重復元素,可以使用大括號“{ }”或者set()函數來創建,注意:定義一個空集合必須用set(),而不是“{ }”,因為“{ }”是用來創建一個空字典的。集合的基本操作舉例說明如下。

    # 1.定義一個空的集合
    BitcoinExchangeSets=set()

    # 2.使用update來增加一個元素
    BitcoinExchangeSets.update (['OKCOIN比特幣交易所','火幣比特幣交易所','LBANK比特幣交
    易所'])
    print (BitcoinExchangeSets)
    >> {'OKCOIN比特幣交易所', 'LBANK比特幣交易所', '火幣比特幣交易所'}

    # 3.使用discard來刪除一個元素
    BitcoinExchangeSets.discard('OKCOIN比特幣交易所')
    print (BitcoinExchangeSets)
    >> {'LBANK比特幣交易所', '火幣比特幣交易所'}

    # 4.使用in查詢關鍵字
    txBool='火幣比特幣交易所' in BitcoinExchangeSets
    print (txBool)
    >> True

    # 5修改集合內的元素
    #第一步,刪除
    BitcoinExchangeSets.discard('火幣比特幣交易所')
    #第二步,增加
    BitcoinExchangeSets.update(['OKEX比特幣交易所'])
    print (BitcoinExchangeSets)
    >> {'LBANK比特幣交易所', 'OKEX比特幣交易所'}

4.字典

字典是另一種可變容器模型,可存儲任意類型的對象。字典的每個鍵值對“key=>value”用冒號“:”分隔,每個對之間用逗號“,”分隔,整個字典包括在花括號“{ }”中,格式為d={key1 : value1, key2 : value2 }。鍵必須是唯一的,且是不可變的,但值則不必唯一,可取任何數據類型,如字符串、數字或元組。字典的基本操作舉例說明如下。

(1)創建新的字典。

    # 創建新的字典
    ExchangeDict={'中金所':'CFFEX',
                '上期所':'SHFE',
                '鄭商所':'CZCE',
                '大商所':'DCE',
                '國際能源交易中心':'INE'}

(2)增加、刪除、查詢和修改元素。

    # 1. 增加元素
    ExchangeDict['上金所']=['SGE']
    ExchangeDict
    >> {'上期所': 'SHFE',
     '上金所': ['SGE'],
     '中金所': 'CFFEX',
     '國際能源交易中心': 'INE',
     '大商所': 'DCE',
     '鄭商所': 'CZCE'}
    # 2. 刪除元素
    del ExchangeDict['上金所']
    ExchangeDict
    >> {'上期所': 'SHFE', '中金所': 'CFFEX', '國際能源交易中心': 'INE', '大商所': 'DCE',
    '鄭商所': 'CZCE'}

    # 3. 查詢元素,根據交易所名稱查詢交易所代碼
    ExchangeDict['中金所']
    >> 'CFFEX'

    # 4.修改元素
    print ('修改前,上期所代碼:',ExchangeDict['上期所'])
    ExchangeDict['上期所']=['SQS']
    print ('修改后,上期所代碼:', ExchangeDict['上期所'])
    >> 修改前,上期所代碼:SHFE
    修改后,上期所代碼:['SQS']

2.2.4 布爾值

在Python中布爾值(Bool)通過常量“True”和“False”來表示。比較運算符如“<”“ >”“==”等返回的類型就是布爾類型;布爾類型通常在if和while語句中應用。應該注意的是,布爾是int的子類(繼承int),故判斷如True==1 False==0時,其返回結果是True。

布爾值的應用舉例說明如下。導入金融庫TA-Lib的簡單均線函數SMA,定義新的函數sma,若array=True,則輸出一系列均線,反之,若array=False,則輸出最新的一條均線數據。

    import talib
    def sma(self, n, array=False):
          """簡單均線"""
          result=talib.SMA(self.close, n)
          if array=True:
              return result
          return result[-1]

一般情況下,“if array:”已經是默認“if array=True:”,所以函數可以進一步簡化,如下:

    def sma(self, n, array=False):
          """簡單均線"""
          result=talib.SMA(self.close, n)
          if array:
              return result
          return result[-1]

2.2.5 空值

空值(None)是Python語言里一個特殊的值,表示的是一個空對象,但不能將其理解為0,因為0是有意義的。None既可以被賦值給任何變量,也可以將任何變量賦值給None。所以None常用于初始化。

    self.datetime=None              # python的datetime時間對象
主站蜘蛛池模板: 铁力市| 澄迈县| 祥云县| 华亭县| 垣曲县| 兴义市| 徐水县| 福建省| 瓮安县| 陇南市| 吐鲁番市| 盖州市| 沾化县| 陕西省| 离岛区| 时尚| 环江| 唐海县| 丰台区| 监利县| 阳朔县| 万盛区| 潮州市| 曲靖市| 惠水县| 孝昌县| 清水河县| 安达市| 元朗区| 光山县| 双城市| 柏乡县| 西华县| 马边| 天津市| 河南省| 横山县| 金湖县| 沾益县| 肥乡县| 永康市|