> For the complete documentation index, see [llms.txt](https://taseikyo.gitbook.io/arts/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://taseikyo.gitbook.io/arts/si-yue-1/202104w4.md).

# 第 26 期：任何人答应你的事都不算数，只有你自己能做主的事才算数。

> @Author : Lewis Tian (<taseikyo@gmail.com>)
>
> @Link : github.com/taseikyo
>
> @Range : 2021-04-25 - 2021-05-01

## Weekly #26

[readme](/arts/readme.md) | [previous](/arts/si-yue-1/202104w3.md) | [next](/arts/wu-yue-1/202105w1.md)

本文总字数 2361 个，阅读时长约：4 分 33 秒，统计数据来自：[算筹字数统计](http://www.xiqei.com/tools?p=tj)。

![](/files/-MZ1MDQ4q9Z8Z6ay7Ubn)

\**Photo by* [*Sangga Rima Roman Selia*](https://unsplash.dogedoge.com/@sxy_selia) *on* [*Unsplash*](https://unsplash.dogedoge.com/photos/4ZGrQ7EjLe4)

> 明年此日青云去，却笑人间举子忙。—— 辛弃疾 鹧鸪天·送廓之秋试

### Table of Contents

* [algorithm](/arts/si-yue-1/202104w4.md#algorithm-)
* [review](/arts/si-yue-1/202104w4.md#review-)
  * 像 C 一样快地运行 Python 代码
  * 每个 Python 编程者都应该掌握的 8 个内置函数
* [tip](/arts/si-yue-1/202104w4.md#tip-)
  * 用谷歌地图（Google Earth）查看 36 年的变迁
  * 支持微信格式的 Markdown 编辑器
  * 解锁 Medium 会员文章
* [share](/arts/si-yue-1/202104w4.md#share-)
  * 任何人答应你的事都不算数，只有你自己能做主的事才算数。

### algorithm [🔝](/arts/si-yue-1/202104w4.md#weekly-26)

### review [🔝](/arts/si-yue-1/202104w4.md#weekly-26)

#### 1. [像 C 一样快地运行 Python 代码](https://towardsdatascience.com/run-your-python-code-as-fast-as-c-4ae49935a826)

本文介绍了另一个 Python 解释器：pypy。

```python
import time
from termcolor import colored

start = time.time()
number = 0
for i in range(100000000):
    number += i

print(colored("FINISHED", "green"))
print(f"Ellapsed time: {time.time() - start} s")
```

上面代码，使用默认 Python 解释器需要 9.28 秒，而 pypy 只需要 0.22 秒，这是一个巨大的性能提升。

![](/files/-MZ1MDQ5bpF46GCr93Q5)

pypy 提升性能的秘诀是即时编译（just-in-time），简称 JIT 编译

像 C，C++ 这种编译型语言，在运行前需要编译成机器能读懂的二进制代码，这种属于 AOT 编译（ahead-of-time）

![](/files/-MZ1MDQ6kyxlXxv275HF)

\**Ahead-of-Time Compilation converts source files to machine code.*

而解释型语言则是由解释器一行一行解释运行，所以慢

![](/files/-MZ1MDQ7bL7sH-ovTEFR)

\**An interpreter runs a program line by line.*

Python 的默认解释器叫做 CPython，PyPy 是利用即时编译实现的另一种 Python 解释器。

PyPy 并不是逐行解释代码，而是在执行之前将部分代码编译为机器代码。

![](/files/-MZ1MDQ8cWhHAfxN_773)

\**JIT compilation combines ahead-of-time compilation and interpretation.*

看起来，JIT 编译是逐行解释和提前编译的结合

最重要的是使用 PyPy 不需要修改代码即可运行

#### 2. [每个 Python 编程者都应该掌握的 8 个内置函数](https://levelup.gitconnected.com/8-built-in-functions-every-python-programmer-should-know-3552eb768894)

1、`hash(input_object)`

返回对象的哈希值，注意参数必须是不可变对象（immutable object），如 list 就不行

2、`map(function, iterable)`

对可迭代对象中每一个对象调用函数

```python
def square(n):
    return n * n

num_list = [1,2,3,4]
result = map(square, num_list)
print('Mapped result is: ', list(result))
# Output:
# Mapped result is:  [1, 4, 9, 16]
```

3、`zip(*iterators)`

从函数名来看就是压缩，注意它以最短的迭代对象为准，有 "截断" 作用

```python
numbers = [1, 2, 3, 4]
letters = ['One', 'Two', 'Three']

result = zip(numbers, letters)

# converting values to print as set
result = set(result)
print('The zipped result is: ', result)
print(list(zip(letters)))
# Output:
# The zipped result is:  {(3, 'Three'), (1, 'One'), (2, 'Two')}
# [('One',), ('Two',), ('Three',)]
```

4、`eval(string)`

能解析字符串的函数：

```python
result1 = eval('10 + 15')
result2 = eval('3 * 8')

print(result1)
print(result2)
# 25
# 24
```

5、`string.split(separator, maxsplit)`

我很常用的一个函数了，如：`txt.split("#")`

6、`ord(character)`

返回一个字符的 Unicode code：

```python
x = ord('a')
y = ord('$')
z = ord(' ')   #space character

print(x)
print(y)
print(z)
# 97
# 36
# 32
```

7、`dir(object)`

返回对象的所有属性，没用过这个函数，之前好像见过：

```python
class Student:
  name = "Joy",
  age = 16,
  rollNo = 25

print(dir(Student))
# ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__',
# '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__',
# '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__',
# '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',
# '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__',
# '__weakref__', 'age', 'name', 'rollNo']
```

8、`pow(num, exp)`

老实说，这个函数没用，`x**y` 它不香吗

```python
x = pow(2, 3)
y = pow(3, 3)
print(x)
print(y)

# 8
# 27
```

文章一般，竟然还要会员

### tip [🔝](/arts/si-yue-1/202104w4.md#weekly-26)

#### 1. [用谷歌地图（Google Earth）查看 36 年的变迁](https://earthengine.google.com/timelapse)

这好像是谷歌地图出的一个页面，可以查看一个从 1984 年到 2020 年的地貌变化过程，我录了个光谷的 36 年变迁，还是挺震撼的，看着一条条公路和城市的建设，真是从一片荒凉变成现代化商业圈：

![](/files/-MZ1MDQ9AmuschEzCOmp)

然后搜了一下光谷的发展历程：

武汉东湖新技术开发区，简称"东湖高新区"，"东湖开发区"，别称"中国光谷"。

* 1984 年，东湖高新区开始筹建。
* 1988 年，东湖高新区创建成立。
* 1991 年，被国务院批准为首批国家级高新技术产业开发区（面积 24 平方公里）。
* 2000 年，被科技部、外交部批准为 APEC 科技工业园区。
* 2001 年，被原国家计委、科技部批准为国家光电子产业基地，即 "武汉・中国光谷"。
* 2006 年，被科技部列为全国建设世界一流科技园区试点之一；被商务部、信息产业部、科技部确定为国家服务外包基地城市示范区。
* 2007 年，被国家发改委批准为国家生物产业基地。
* 2009 年，被国务院批准为国家自主创新示范区，是全国 17 个国家自主示范区的第二个国家自主创新示范区（北京中关村、武汉东湖、上海张江、深圳、苏南等）。
* 2011 年 4 月，中组部和国务院国资委确定武汉未来成为四家全国 "中央企业集中建设人才基地" 之一（北京、天津、杭州、武汉）。
* 2012 年 5 月，获批东湖国家级文化和科技融合示范基地。
* ...

巧合在于正好是 1984 年开始筹建，有趣。

#### 2. [支持微信格式的 Markdown 编辑器](https://devtool.tech/markdown)

一个不错的支持微信公众号的 Markdown 编辑器

* 导出 PDF
* 支持微信外链转脚注
* 微信外链转二维码
* 从 URL 采集 Markdown

编辑好内容可以直接复制然后到微信公众号粘贴，试了下效果还不错。

#### 3. 解锁 Medium 会员文章

之前 [weekly#19@tip4](https://taseikyo.gitbook.io/arts/si-yue-1/pages/-MVfaVe6G08_AXJ_xWgB#4-一键解锁-medium-会员文章) 中介绍了一种解锁的方法，但是今天使用的时候出现了一点问题，很多文章解锁不了，试了 5 篇文章，成功了一篇，然后发现了另一种方法。

分享到 twitter，然后从 twitter 的分享链接点进文章就解锁了！

### share [🔝](/arts/si-yue-1/202104w4.md#weekly-26)

#### 1. 任何人答应你的事都不算数，只有你自己能做主的事才算数。

这是《大明王朝 1566》中最后嘉靖皇帝对小万历说的一句话，当初看到他说这句话，我就深以为然。

很多时候，自己无法掌控的时候，别人答应的事不要真的当真。毕竟那些事情你无法做主，你只能被动接受结果。

所以有时候不要真的把别人的许诺当真，你知道有这么一件事就行。别人真的做到了，那固然好，感谢对方的信守承诺，毕竟有句古话叫，君子一言，驷马难追；但是别人没做到，也不必怨天尤人，一方面是对方做人做事有问题，另一方面可能是自己的实力不够或者运气不足。

![](/files/-MZ1MDQA3tTLzkowBIGH)

[readme](/arts/readme.md) | [previous](/arts/si-yue-1/202104w3.md) | [next](/arts/wu-yue-1/202105w1.md)
