文本就是字符串
字符串(str)就是文本。可以放在单引号或双引号之间,两者含义相同,选一种风格并保持一致。反斜杠表示转义,例如 \n 是换行。len() 用来统计字符数。字符串是不可变的:不能原地修改,只能生成一个新的字符串。
symbol = "AAPL"
note = 'bid and ask'
print(symbol, len(symbol)) # AAPL 4
print(note) # bid and ask索引与切片
每个字符都有一个从 0 开始计数的位置。text[0] 是第一个字符,text[-1] 是最后一个。切片 text[start:stop] 取从 start 到 stop 之前的字符;省略一侧则一直取到那一端。
# Indexing starts at 0; a slice stops before its end index
ticker = "AAPL.US"
print(ticker[0], ticker[-1]) # A S
print(ticker[:4], ticker[5:]) # AAPL US清理与拆分文本的方法
方法(method)是附属于某个值、用点号调用的函数。它们返回新的字符串,原字符串保持不变。strip() 去掉文本两侧的空格和换行,upper() 与 lower() 改变大小写,replace(old, new) 替换文本,split(",") 在每个逗号处切开一行,得到一个由片段组成的列表。数据源里到处都是这样的行。
# Clean up a raw line from a data feed
raw = " aapl,184.25,200 \n"
parts = raw.strip().split(",")
print(parts) # ['aapl', '184.25', '200']
print(parts[0].upper()) # AAPL
print(float(parts[1])) # 184.25# join is the opposite of split; in tests for a piece of text
print("-".join(["AAPL", "MSFT"])) # AAPL-MSFT
print("AAPL" in "AAPL,MSFT") # Truef-string 把值放进文本
在起始引号前加一个 f,并在 { 与 } 之间写任意表达式:Python 会计算它,并把结果作为文本插入。这样就不必再用 + 拼接,也不必手动转换数字。花括号里可以放任何有效表达式,甚至是算式。
# f-strings put values straight into text
symbol, bid, ask = "AAPL", 184.25, 184.5
print(f"{symbol} {bid} x {ask}") # AAPL 184.25 x 184.5
print(f"{symbol} spread {ask - bid}") # AAPL spread 0.25格式说明符
花括号内冒号后面的格式说明符决定值的显示方式。.2f 显示两位小数,, 加上千位分隔符,+ 始终显示符号,>8 在宽度 8 内右对齐,.1% 把小数显示为百分比。它们可以组合:+,.2f 表示带符号、千位分隔符和两位小数的金额。
# After the colon, a format spec controls the look
price, pnl, quantity = 184.5, 1234.5, 200
print(f"{price:.2f}") # 184.50
print(f"{pnl:+,.2f}") # +1,234.50
print(f"{quantity:>8d}|") # " 200|"
print(f"{0.0123:.1%}") # 1.2%格式化只用于显示格式化后的值是文本,不再是数字。计算时继续使用数字(见整数与浮点数),只在打印或保存文本的那一刻再格式化。
下一节:布尔值与比较,交易规则中的每个判断都由 True 和 False 构成。
实验:评分内容
- 用
quote_line把报价写成文本25 分 - 用
signed_pnl显示带符号的盈亏25 分 - 用
normalize_symbol清理股票代码25 分 - 用
parse_fill读取数据源中的成交行25 分