Vyper 数据类型(系列 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中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。 Python以简洁和强大的生态系统着称,C 则以高性能和底层控制能力闻名。

Python在游戏和GUI开发中表现出色。1)游戏开发使用Pygame,提供绘图、音频等功能,适合创建2D游戏。2)GUI开发可选择Tkinter或PyQt,Tkinter简单易用,PyQt功能丰富,适合专业开发。

Python更易学且易用,C 则更强大但复杂。1.Python语法简洁,适合初学者,动态类型和自动内存管理使其易用,但可能导致运行时错误。2.C 提供低级控制和高级特性,适合高性能应用,但学习门槛高,需手动管理内存和类型安全。

要在有限的时间内最大化学习Python的效率,可以使用Python的datetime、time和schedule模块。1.datetime模块用于记录和规划学习时间。2.time模块帮助设置学习和休息时间。3.schedule模块自动化安排每周学习任务。

Python在开发效率上优于C ,但C 在执行性能上更高。1.Python的简洁语法和丰富库提高开发效率。2.C 的编译型特性和硬件控制提升执行性能。选择时需根据项目需求权衡开发速度与执行效率。

Python在自动化、脚本编写和任务管理中表现出色。1)自动化:通过标准库如os、shutil实现文件备份。2)脚本编写:使用psutil库监控系统资源。3)任务管理:利用schedule库调度任务。Python的易用性和丰富库支持使其在这些领域中成为首选工具。

pythonlistsarepartofthestAndArdLibrary,herilearRaysarenot.listsarebuilt-In,多功能,和Rused ForStoringCollections,而EasaraySaraySaraySaraysaraySaraySaraysaraySaraysarrayModuleandleandleandlesscommonlyusedDduetolimitedFunctionalityFunctionalityFunctionality。

每天学习Python两个小时是否足够?这取决于你的目标和学习方法。1)制定清晰的学习计划,2)选择合适的学习资源和方法,3)动手实践和复习巩固,可以在这段时间内逐步掌握Python的基本知识和高级功能。
