Vyper 入门: 10. 控制流 在 Vyper 中,控制流指导了程序如何根据不同的条件和循环进行操作。主要的控制流结构包括: 语句:用于基于特定条件执行不同的代码块。 循环:for 语句是一个控制流结构,用于迭代一个值 :提供一种简洁的方式来根据条件选择两个值中的一个。 与 solidity 不同的是,安全和可预测性的考虑,Vyper 中不存在 和 循环 if-else 请注意,与 Python 不同,Vyper 不允许在 语句的条件内从非布尔类型进行隐式转换。 比如 将因类型不匹配而无法编译。
if-else 语句:用于基于特定条件执行不同的代码块。for 循环:for 语句是一个控制流结构,用于迭代一个值三元运算符:提供一种简洁的方式来根据条件选择两个值中的一个。while 和 do-while 循环if 语句的条件内从非布尔类型进行隐式转换。 比如if 1: pass 将因类型不匹配而无法编译。@view @external def is_active(_index: uint256) -> bool: if _index > 1: return True elif _index == 1: return False else: return False
for i in range(START, STOP) 循环时,START 和 STOP 的值必须是字面整数或者常量(constant),无法使用参数或者内存变量NUMBER: constant(uint256) = 30 @view @external def sum_numbers() -> uint256: total: uint256 = 0 for i in range(0, 30): total += i return total @view @external def sum_numbers1() -> uint256: total: uint256 = 0 for i in range(0, NUMBER): total += i return total
@view @external def sum_numbers_error(_number: uint256) -> uint256: total: uint256 = 0 for i in range(0, _number): total += i return total
Vyper 不允许在 if 语句的条件内从非布尔类型进行隐式转换@view @external def get_max(_a: uint256, _b: uint256) -> uint256: return _a if _a > _b else _b
@view @external def get_max(_a: uint256, _b: uint256) -> uint256: return _a if _a else _b
另外还有 continue(立即进入下一个循环)、break(跳出当前循环)和 pass (声明一个没有实现的函数)关键字可以使用,可以查看 官方文档 。