首页 >后端开发 >Python教程 >Vyper 数据类型(系列 2)

Vyper 数据类型(系列 2)

Barbara Streisand
Barbara Streisand原创
2025-01-16 12:28:57685浏览

Vyper Data Types (Series 2)

之前,我们探讨了 Vyper 为什么是游戏规则的改变者,因为它是最快发展的智能合约开发语言之一。

我们还探讨了一些基础知识,例如 Pragma 和 Constructor。您可以在这里阅读。

今天,我们将深入研究数据类型及其工作原理。

什么是数据类型?

数据类型帮助我们组织代码中的不同信息,就像我们在家里将物品分类到特定位置一样。

这些类型在程序运行之前就已设定。就像设计用于液体的容器不适合储存固体一样,Vyper 中的每个变量只能存储其设计的数据类型。

编写代码时,我们需要指定每个变量将保存什么数据类型——无论是用于计算的数字、用于名称的文本,还是用于简单决策的真/假。这些类型确保我们的程序正确处理信息,防止出现诸如尝试将某人的姓名相乘或将字母相加之类的错误。

理解 Vyper 中的数据类型

  • 布尔值 - 简单真/假

将布尔值想象成电灯开关——它们只能处于两种状态:真或假。我们在代码中使用它们来做出是/否决策。

<code>is_active: bool = True
is_paused: bool = False

# 可以翻转布尔值
is_active = not is_active  # 现在是 False</code>

某些运算符可以有效地与布尔值一起使用,包括 not、或 == 和 !=。这意味着我们可以用它们来证明真假。

**运算符** **描述**
not x 逻辑否定
x and y 逻辑合取
x or y 逻辑析取
x == y 相等
x != y 不相等
将这些运算符视为在代码中做出决策的方法:
  • not x - 将真/假值翻转为其相反值

    is_door_locked = True
    is_door_unlocked = not is_door_locked # 结果:False

这就像说“相反的”——如果门是锁着的,那么不锁着就意味着开着。

  • x and y - 两个条件都必须为真

    has_ticket = True
    has_id = True
    can_board_plane = has_ticket and has_id # 结果:True

就像你需要机票和身份证才能登机一样,两个值都必须为真,结果才能为真。

  • x or y - 至少一个条件必须为真。

    has_cash = False
    has_credit_card = True
    can_pay = has_cash or has_credit_card # 结果:True

例如,付款时,可以使用现金或信用卡;你需要其中一个为真。

  • x == y - 检查两个值是否相同

    password = "secret123"
    entry = "secret123"
    is_correct = password == entry # 结果:True

这就像检查两把钥匙是否相同。

  • x != y - 检查两个值是否不同

    expected_price = 100
    actual_price = 90
    price_changed = expected_price != actual_price # 结果:True

这就像检查某事物是否不同,例如注意到价格与预期不同。这些运算符可以帮助您做出逻辑布尔值决策。

数字 - 整数及其变体

在智能合约中使用数字时,Vyper 提供了两种处理整数的基本方法:有符号整数和无符号整数。每种方法都有其特定的用途,了解它们的区别对于编写高效且安全的代码至关重要。

  • 有符号整数

有符号整数可能是 Vyper 中用途最广泛的数字类型,能够表示正值和负值。想象一下银行账户——您可以进行存款(正数)和取款(负数)。这就是有符号整数大放异彩的地方。当您声明一个变量,例如 age: int8 = -5 时,您是在告诉 Vyper 预留 8 位空间,该空间可以容纳 -128 到 127 之间的任何数字。

<code>is_active: bool = True
is_paused: bool = False

# 可以翻转布尔值
is_active = not is_active  # 现在是 False</code>

对于较大的值,Vyper 提供了更大的存储容量。int256 类型通常用于大量的数值运算,可以处理更大的数字。考虑跟踪公司的损益:balance: int256 = 1000。这可以表示任一方向上的大量财务变动。

  • 无符号整数

现实世界中的一些值永远不会为负数。您不能有 -3 个苹果或 -5 个用户。这就是无符号整数发挥作用的地方。像 quantity: uint8 = 255 这样的声明非常适合库存系统或用户计数。

uint8 类型有效地使用 8 位来存储 0 到 255 之间的值,使其成为小型正数的理想选择。

<code>is_active: bool = True
is_paused: bool = False

# 可以翻转布尔值
is_active = not is_active  # 现在是 False</code>

Vyper 中最常用的无符号整数是 uint256。当您编写 price: uint256 = 1000 时,您将创建一个可以容纳巨大正数的变量,非常适合令牌数量或以太坊交易中的 wei 值。

  • 小数

当您需要使用小数点进行精确计算时

<code># 有符号整数(可以为正数或负数)
age: int8 = -5          # 存储范围为 -128 到 127
balance: int256 = 1000  # 较大的范围用于更大的数字</code>
  • 地址 - 用于以太坊账户

我们每天都使用地址来识别位置——您的家、商店或朋友的家。在以太坊世界中,地址的工作方式类似,但它们并非指向物理位置,而是指向数字钱包和智能合约。让我们探讨一下这些地址的独特性以及它们在 Vyper 中的工作方式。

什么是以太坊地址?

<code># 无符号整数(只有正数)
quantity: uint8 = 255   # 存储范围为 0 到 255
price: uint256 = 1000   # 常用于存储大型正数</code>

将以太坊地址想象成一个独特的数字邮箱。就像您的家庭住址确保邮件只到达您手中一样,以太坊地址确保加密货币和数字资产到达其预期的目的地。在 Vyper 中,我们使用称为 address 的特殊类型来处理这些地址。

当您编写类似以下内容时:

<code>price: decimal = 19.99  # 适用于财务计算
tax_rate: decimal = 0.15</code>

您正在创建一个只能存储有效以太坊地址的变量。这些地址始终以“0x”开头,后跟 40 个由数字 (0-9) 和字母 (a-f) 组成的字符。

现实世界中的示例 假设您正在构建一个简单的数字钱包合约。您可以像这样存储地址:

<code>owner: address = 0x123...  # 存储钱包地址
contract: address = 0xABC...</code>

使用地址 Vyper 中的地址具有特殊属性。您可以检查以下内容:

  • 一个地址持有多少以太币
  • 一个地址是否属于智能合约
  • 代码存储在合约地址中

例如,检查地址的余额就像这样简单:

<code>owner: address = 0x71C7656EC7ab88b098defB751B7401B5f6d8976F</code>

地址帮助我们浏览区块链,确保我们的数字资产和交互安全可靠地到达其预期目的地。

  • 字节数组 - 用于原始数据

在 Vyper 中,字节数组用于处理原始二进制数据。将它们想象成用于存储计算机可以直接处理的信息的容器。字节数组在处理文件、加密哈希或二进制运算时特别有用。

<code># 钱包的所有者
owner: address = 0x71C7656EC7ab88b098defB751B7401B5f6d8976F



# 可靠的备份地址
backup_wallet: address = 0x8626f6940E2eb28930eFb4CeF49B2d1F2C9C1199</code>

静态字节数组 静态字节数组具有固定大小,无法更改。这使其简单高效。

示例:存储固定大小的哈希值 假设您有一个唯一的代码,例如始终为 32 个字节长的指纹。以下是如何在 Vyper 中存储它。

fixed_code: bytes32 这意味着 bytes32 将始终为 32 个字节。

动态字节数组

如果动态字节数组不超过最大大小,则可以容纳不同长度的数据。它有助于存储诸如简短消息之类的内容。

示例:保存简短消息 假设您想保存一条消息,例如“Hello, World!”,其长度最多可达 100 个字节:

<code>is_active: bool = True
is_paused: bool = False

# 可以翻转布尔值
is_active = not is_active  # 现在是 False</code>

好了,今天学习就到这里。我们的下一篇文章将检查更多数据类型,并了解它们的功能。

要阅读更多上述内容,请查看 Vyper 文档和 Vyper 示例。

以上是Vyper 数据类型(系列 2)的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn