之前,我们探讨了 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中文网其他相关文章!

Tomergelistsinpython,YouCanusethe操作员,estextMethod,ListComprehension,Oritertools

在Python3中,可以通过多种方法连接两个列表:1)使用 运算符,适用于小列表,但对大列表效率低;2)使用extend方法,适用于大列表,内存效率高,但会修改原列表;3)使用*运算符,适用于合并多个列表,不修改原列表;4)使用itertools.chain,适用于大数据集,内存效率高。

使用join()方法是Python中从列表连接字符串最有效的方法。1)使用join()方法高效且易读。2)循环使用 运算符对大列表效率低。3)列表推导式与join()结合适用于需要转换的场景。4)reduce()方法适用于其他类型归约,但对字符串连接效率低。完整句子结束。

pythonexecutionistheprocessoftransformingpypythoncodeintoExecutablestructions.1)InternterPreterReadSthecode,ConvertingTingitIntObyTecode,whepythonvirtualmachine(pvm)theglobalinterpreterpreterpreterpreterlock(gil)the thepythonvirtualmachine(pvm)

Python的关键特性包括:1.语法简洁易懂,适合初学者;2.动态类型系统,提高开发速度;3.丰富的标准库,支持多种任务;4.强大的社区和生态系统,提供广泛支持;5.解释性,适合脚本和快速原型开发;6.多范式支持,适用于各种编程风格。

Python是解释型语言,但也包含编译过程。1)Python代码先编译成字节码。2)字节码由Python虚拟机解释执行。3)这种混合机制使Python既灵活又高效,但执行速度不如完全编译型语言。

useeAforloopWheniteratingOveraseQuenceOrforAspecificnumberoftimes; useAwhiLeLoopWhenconTinuingUntilAcIntiment.ForloopSareIdeAlforkNownsences,而WhileLeleLeleLeleLoopSituationSituationSituationsItuationSuationSituationswithUndEtermentersitations。

pythonloopscanleadtoerrorslikeinfiniteloops,modifyingListsDuringteritation,逐个偏置,零indexingissues,andnestedloopineflinefficiencies


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

Atom编辑器mac版下载
最流行的的开源编辑器

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境