Skip to content

Commit

Permalink
update: 240803 ver 1
Browse files Browse the repository at this point in the history
  • Loading branch information
V1CeVersaa committed Aug 3, 2024
1 parent c210efd commit 8d7c80c
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 5 deletions.
2 changes: 1 addition & 1 deletion docs/Computer Science/Blockchain/ERC.md
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@
- 作用:检查 `spender` 是否有权限操作 `tokenId`,如果没有就抛出异常。
- 细节:首先调用 `_isAuthorized` 检查权限,如果没有权限就抛出异常,异常分为两种情况:
- `owner` 为 0,代币不存在,抛出 `ERC721NonexistentToken` 异常;
- `owner` 为 0,代币存在,但是 `spender` 没有权限, 抛出 `ERC721InsufficientApproval` 异常。
- `owner` 为 0,代币存在,但是 `spender` 没有权限,抛出 `ERC721InsufficientApproval` 异常,在做 [SchoolBus Safe NFT](https://www.zjusec.com/challenges/169) 一题的过程中遇见最多的就是这个异常
- 实现:
```solidity
function _checkAuthorized(address owner, address spender, uint256 tokenId) internal view virtual {
Expand Down
57 changes: 53 additions & 4 deletions docs/Computer Science/Programming Language/Python/VAT.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,65 @@
# 01 Variable and Types

## Built-in Types
## 内置类型

### 序列类型

### String
#### 通用序列操作

#### f-string
> 可见 [Sequence Types — list, tuple, range](https://docs.python.org/3/library/stdtypes.html#sequence-types-list-tuple-range)
>
> 也可见 [collections.abc — Abstract Base Classes for Containers](https://docs.python.org/zh-cn/3/library/collections.abc.html#collections.abc.Sequence)
大多数序列类型,无论是可变类型还是不可变类型都支持下表中的操作,这里的 `s``t` 都是具有相同类型的序列,`n``i``j``k` 是整数,`x` 是满足序列定义的任何元素。

- `x in s` 如果 `s` 中的某项等于 `x`,则返回 `True`,否则返回 `False`
-`str``bytes``bytearray` 类型中,这也可以用于检查子序列:`'ab' in 'abc'` 返回 `True`
- `x not in s` 如果 `s` 中的某项等于 `x`,则返回 `False`,否则返回 `True`
- `s + t` 返回 `s``t` 拼接的序列。
- 某些序列类型仅仅支持特定模式的项序列,因此不支持序列拼接或者重复,比如 `range`
- 拼接不可变序列总是会生成新的对象,重复拼接会导致运行时的开销巨大(序列总长度的平方级别),下面是一些可以降低开销到线性的方法:
- 对于 `str` 类型,可以使用 `str.join()` 方法,或者写入 `io.StringIO` 对象,结束的时候再获取值;
- 对于 `bytes` 类型,可以使用 `bytes.join()` 方法,或者写入 `io.BytesIO` 对象,也可以使用 `bytearray` 对象进行原地拼接,因为 `bytearray` 是可变的,并且有高效的重分配机制;
- 对于 `tuple` 类型,可以改为扩展 `list` 类。
- `s * n``n * s` 返回由 `s``n` 个拷贝构成的序列。
- 但是序列 `s` 中的项并不会被拷贝,它们会被多次引用,所以会造成下面的问题:
```python
>>> lists = [[]] * 3
>>> lists
[[], [], []]
>>> lists[0].append(3)
>>> lists
[[3], [3], [3]]
```
原因是 `[[]]` 其实是一个包含了空列表的单元素列表,`* 3` 后结果的三个元素都是对这个空列表的引用,修改其中一个元素的值,其他两个也会受到影响,同时受到修改,但是按照下边这样就好了;
```python
>>> lists = [[] for _ in range(3)]
>>> lists[0].append(3)
>>> lists
[[3], [], []]
```
- `s[i]` 返回序列 `s` 中的第 `i` 个元素,`i` 是整数。
- `s[i:j]` 返回序列 `s` 中的第 `i``j - 1` 个元素构成的序列,`i``j` 是整数。
- `j` 是切片的终止位置,可以理解成尾后位置,这样的切片定义成所有满足 `i <= k < j` 的索引号 `k` 的项组成的序列。
- 如果 `i` 或者 `j` 超出了 `len(s)`,那么会被替换为 `len(s)`
- 如果 `i` 为被省略或者被替换成 `None`,那么会被替换为 `0`,如果 `j` 被省略或者被替换成 `None`,那么会被替换为 `len(s)`
- 如果 `i >= j`,那么切片为空。


### 文本序列类型

#### `str` 类型

Python 中的 `str` 是 Unicode 码位的构成的不可变序列。

#### 格式字符串/f-string

> 见 [f-strings from Python documentation](https://docs.python.org/3.11/reference/lexical_analysis.html#formatted-string-literals)


### 二进制序列类型



### Interconversion between types
### 类型转化

0 comments on commit 8d7c80c

Please sign in to comment.