选择要执行的代码
到目前为止,每一行都会从上到下执行。if 语句只在条件为 True 时才执行一段代码。用 elif(“否则如果”)添加更多条件,用 else 处理其余所有情况。Python 按顺序检查,只执行第一个条件为真的代码块。每个条件行都以冒号结尾。
position, target = 100, 250
if target > position:
print("buy", target - position) # buy 150
elif target < position:
print("sell", position - target)
else:
print("hold")缩进就是结构
if 下面缩进的行属于它的代码块;第一行回到左边距的代码就在块外。每一层用四个空格,并始终保持一致。Python 没有花括号:缩进就是结构,所以缩进错了,程序的行为就会改变。
# The indented lines are the block that belongs to the if
price = 184.5
if price > 184:
print("above 184") # above 184
print("still inside the if")
print("always runs") # back at the left margin顺序很重要:第一个匹配的分支生效
由于只有第一个为真的分支会执行,elif 阶梯可以使用阈值:每个分支只需说明新增的条件。手续费阶梯就是典型例子。要把最窄、最具体的条件放在前面,否则上面范围更大的条件会把这个情况“吞掉”。
# elif branches are checked top to bottom; the first True wins
monthly_volume = 3_500_000
if monthly_volume < 1_000_000:
rate = 0.0010
elif monthly_volume < 10_000_000:
rate = 0.0007
else:
rate = 0.0004
print(rate) # 0.0007提前返回
在函数里,return 会立即结束函数。因此可以为每种情况各写一个 if 加 return,不需要 else,也不需要深层嵌套;最后一行就是默认结果。这样写的代码结构平坦,读起来像一份规则清单。
# Early returns keep a function flat
def side(position, target):
if target > position:
return "buy"
if target < position:
return "sell"
return "hold"
print(side(100, 250), side(250, 100), side(100, 100)) # buy sell hold一行完成选择
当 if 只是在两个值中选一个时,条件表达式更简短:value_if_true if condition else value_if_false。它是表达式,所以可以放在 f-string 或 return 里。简单的选择用它,一旦要做的事情更多就改用普通的 if。
# A one-line choice between two values
cash = 40.0
status = "ok" if cash >= 0 else "overdrawn"
print(status) # ok不要把布尔值与 True 比较如果
is_open 本来就是布尔值,就写 if is_open: 和 if not is_open:。if is_open == True: 只是把同样的意思说得更笨拙。对数字和文本使用 if x: 也是一样,它判断的是“非零”和“非空”。- 两种结果:
if/else,或一行的条件表达式。 - 多个有序区间:
elif阶梯,最窄的条件放在最前。 - 特殊情况与无效输入:先提前
return,正常情况放在最后。
下一节:for 循环与 range,为每个元素重复执行一段代码。
实验:评分内容
- 用
order_side决定买入、卖出或持有25 分 - 用
fee_tier按成交量选择费率25 分 - 用
clamp把数值限制在两个界限之间25 分 - 用
crossover_signal把两条均线变成信号25 分