title: 2. 值类型 tags: vyper basic value type WTF Vyper 教程: 2. 值类型 Vyper 提供对两类变量类型的访问: 值(Value): 合约中变量的任何使用都将直接传递其值。 引用(Reference): 合约中变量的任何使用都将传递对内存中地址的引用,而不是值存储在那里。 本节中我们只介绍值类型,引用类型将在第 4 节中详细介绍。
title: 2. 值类型 tags: - vyper - basic - value type
Vyper 提供对两类变量类型的访问:
值(Value): 合约中变量的任何使用都将直接传递其值。
引用(Reference): 合约中变量的任何使用都将传递对内存中地址的引用,而不是值存储在那里。
本节中我们只介绍值类型,引用类型将在第 4 节中详细介绍。
布尔值分为 True 和 False, 布尔值的运算和 Python 一致。在 Vyper 中使用 bool 对变量进行声明时值默认为 False。
is_bool: public(bool) @payable @external def __init__(): self.is_bool = True
布尔值的运算包括
代码示例:
bool1: bool = True bool2: bool = not bool1 bool1 and bool2 -> False bool1 or bool2 -> True bool1 == bool2 -> False bool1 != bool2 -> True
常用的整型包括
# 有符号的256位整数,包括负数 number: int256 = -1 # 无符号的256位正整数 number: uint256 = 123456
整型运算包括
==, !=, <, >, <=, >=+, -, *, /, **, %&, |, ^, ~<<, >>Vyper 中,只有相同类型的变量才能进行运算,代码示例:
x: uint256 = 100 y: uint256 = 200 is_bool: bool = x < y number: uint256 = x + y number2: uint256 = x & y
Vyper 中的地址类型是一种基本的数据类型,用于存储一个 20 字节的以太坊地址,这些地址通常包括外部账户和合约账户。在 Vyper 中直接使用 address 关键字声明地址变量。
owner: public(address) self.owner = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE
在 Vyper 中,字节数组是用于存储和处理字节序列的数据类型,具体分为定长字节数组(bytesN)和可变字节数组(Bytes[N])。
bytesN 这是一个 N 字节宽的字节数组, 比如 bytes32 是一个固定长度的 32 字节的字节数组。它通常用于存储 256 位的 keccak 哈希值、密钥和其他固定长度的加密数据。bytes4常用于存储函数选择器
代码示例
# 0x4f8b61438cf1d5e6f4f684d62bf496fc8975999b940392b49a2b70e209a69c12 bytes_value: bytes32 = keccak256("Vyper") method: bytes4 = 0x01abcdef
Bytes[N] 是一个可变长度的字节数组,其中 N 定义了字节数组的最大长度。代码示例:
bytes_string: Bytes[100] = b"\x01"
String[N] 是一个可变长度的字符串字节数组,其中 N 定义了字符串的最大长度。它是专门用于存储文本数据的类型,与 Bytes[N]类似,但更适合处理纯文本。
代码示例:
example_str: String[100] = "Hello Vyper!"
在本节中,我们介绍了 Vyper 中的 5 种常用的值变量类型,如果想要了解更加详细的类型内容,可以在官方文档中查看。