ptyhno 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
ptyhno-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,707 @@
1
+ Metadata-Version: 2.4
2
+ Name: ptyhno
3
+ Version: 0.1.0
4
+ Summary: 🦄 Ptyhno 编程语言 — 当 Python 喝多了之后的样子
5
+ Author: Ptyhno 语言设计委员会
6
+ Author-email: noreply@ptyhno.lang
7
+ License: WTFPL
8
+ Project-URL: Homepage, https://github.com/ptyhno/ptyhno
9
+ Project-URL: Source, https://github.com/ptyhno/ptyhno
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: License :: Freely Distributable
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Topic :: Software Development :: Interpreters
14
+ Classifier: Topic :: Software Development :: Compilers
15
+ Classifier: Environment :: Console
16
+ Requires-Python: >=3.8
17
+ Description-Content-Type: text/markdown
18
+ Dynamic: author-email
19
+ Dynamic: requires-python
20
+
21
+ # 🦄 Ptyhno 语言参考
22
+
23
+ > **版本 0.1.0** — 当 Python 喝多了之后的样子。
24
+ >
25
+ > Ptyhno 是一种基于 Python 的转译语言。它把你的"中文关键字 + 表情符号 + 行尾噪音"代码转成标准 Python 再执行。本质上就是在 Python 外面包了一层很骚的皮。
26
+
27
+ ---
28
+
29
+ ## 目录
30
+
31
+ 1. [快速开始](#快速开始)
32
+ 2. [语言规范](#语言规范)
33
+ 3. [关键字表](#关键字表)
34
+ 4. [操作符表](#操作符表)
35
+ 5. [内置函数映射](#内置函数映射)
36
+ 6. [语法特性](#语法特性)
37
+ 7. [Import Hook](#import-hook)
38
+ 8. [扩展名](#扩展名)
39
+ 9. [完整示例](#完整示例)
40
+ 10. [工作原理](#工作原理)
41
+
42
+ ---
43
+
44
+ ## 快速开始
45
+
46
+ ### 安装
47
+
48
+ ```bash
49
+ pip install ptyhno
50
+ ```
51
+
52
+ ### 写你的第一个 Ptyhno 程序
53
+
54
+ 创建 `hello.🦄`:
55
+
56
+ ```python
57
+ 定义 函数 你好(名字):
58
+ 打印 "Hello, " + 名字 ~~~
59
+ 返回 名字 + "さん"
60
+
61
+ 你好("Ptyhno")
62
+ ```
63
+
64
+ 在 Python 里使用它:
65
+
66
+ ```python
67
+ import ptyhno # ← 自动安装 import hook
68
+ import hello # ← 自动找 hello.🦄
69
+
70
+ hello.你好("世界") # → Hello, 世界
71
+ ```
72
+
73
+ ### 一行测试
74
+
75
+ ```python
76
+ import ptyhno; exec(ptyhno.transpile('打印 "牛逼" 哈哈哈🔥'))
77
+ ```
78
+
79
+ ### 命令行
80
+
81
+ ```bash
82
+ # 直接运行文件
83
+ python -m ptyhno 文件.🦄
84
+
85
+ # 交互式 REPL
86
+ python -m ptyhno
87
+ 🦄> 打印 "你好" 嘿嘿!
88
+ ```
89
+
90
+ ---
91
+
92
+ ## 语言规范
93
+
94
+ ### 字符集
95
+
96
+ Ptyhno 源码使用 **UTF-8** 编码。支持的字符范围:
97
+
98
+ - 全部 Unicode(中文、日文、韩文、表情符号等)
99
+ - 标准 ASCII(英文、数字、符号)
100
+ - **文件扩展名也支持 Unicode**(`.🦄`、`.疯`)
101
+
102
+ ### 注释
103
+
104
+ ```python
105
+ # 这是注释
106
+ // 这也是注释
107
+ 注:这也是注释
108
+ ```
109
+
110
+ ### 字符串
111
+
112
+ ```python
113
+ "双引号字符串"
114
+ '单引号字符串'
115
+ 「中文引号字符串」
116
+ 【方括号字符串】
117
+ ```
118
+
119
+ 字符串内的所有内容保持原样,不会被关键字替换或噪音去除影响。
120
+
121
+ ### 标识符
122
+
123
+ 标识符(变量名、函数名)支持 Unicode:
124
+
125
+ ```python
126
+ 名字 👉 "Ptyhno"
127
+ 费波那契(10) # 中文函数名
128
+ 🚀 👉 100 # 表情变量名
129
+ _特殊_名称 👉 42 # 混合命名
130
+ ```
131
+
132
+ ### 行尾噪音
133
+
134
+ Ptyhno 最骚的特性。行末可以随意添加语气词和表情,转译器自动忽略:
135
+
136
+ ```python
137
+ 打印 "你好" 哈哈哈!!!🤪🔥 ~~~ 对吧对吧!
138
+ 返回 结果 搞定搞定! 冲冲冲🚀
139
+ ```
140
+
141
+ 噪音规则:
142
+ - **语气词**: `啊` `哦` `呀` `哈` `嘿` `啦` `吗` `吼` 等
143
+ - **标点**: `!` `?` `~` `。` `、` `…` `·` 等
144
+ - **所有 emoji**: `🤪` `🔥` `🎉` `🚀` 等
145
+ - **网络用语**: `牛逼` `厉害` `搞定` `可以` `冲鸭` `不是吧` 等
146
+ - **重复双字词**: `递归递归` `搞定搞定` `对吧对吧对吧`
147
+ - **尾随数字**: 噪音后可以跟数字(如`答案就是42`)
148
+
149
+ ### 缩进
150
+
151
+ Ptyhno 使用缩进表示代码块(和 Python 一致),支持:
152
+
153
+ - 空格缩进(推荐 4 空格)
154
+ - `·` `•` `👉` `*` `-` 等符号也自动转为缩进
155
+
156
+ ```python
157
+ 定义 函数 嗨():
158
+ · 打印 "你好" 哈哈!
159
+ 👉 打印 "也是缩进"
160
+ ```
161
+
162
+ ---
163
+
164
+ ## 关键字表
165
+
166
+ ### 函数和类定义
167
+
168
+ | 你写 | 相当于 |
169
+ |------|--------|
170
+ | `定义 函数 名字():` | `def 名字():` |
171
+ | `函数 名字():` | `def 名字():` |
172
+ | `搞一个 名字():` | `def 名字():` |
173
+ | `弄一个 名字():` | `def 名字():` |
174
+ | `定义 类 名字():` | `class 名字():` |
175
+ | `类型 名字():` | `class 名字():` |
176
+
177
+ ### 条件判断
178
+
179
+ | 你写 | 相当于 |
180
+ |------|--------|
181
+ | `如果 条件:` | `if 条件:` |
182
+ | `要是 条件:` | `if 条件:` |
183
+ | `假如 条件:` | `if 条件:` |
184
+ | `否则如果 条件:` | `elif 条件:` |
185
+ | `再如果 条件:` | `elif 条件:` |
186
+ | `否则:` | `else:` |
187
+ | `不然:` | `else:` |
188
+ | `要不:` | `else:` |
189
+
190
+ ### 循环
191
+
192
+ | 你写 | 相当于 |
193
+ |------|--------|
194
+ | `循环 i 在 范围(10):` | `for i in range(10):` |
195
+ | `遍历 列表:` | `for 元素 in 列表:` |
196
+ | `对于 元素 在 列表:` | `for 元素 in 列表:` |
197
+ | `当 条件:` | `while 条件:` |
198
+ | `只要 条件:` | `while 条件:` |
199
+ | `每当 条件:` | `while 条件:` |
200
+
201
+ ### 返回值
202
+
203
+ | 你写 | 相当于 |
204
+ |------|--------|
205
+ | `返回 值` | `return 值` |
206
+ | `吐出来 值` | `return 值` |
207
+ | `交出 值` | `return 值` |
208
+ | `给 值` | `return 值` |
209
+
210
+ ### 输入输出
211
+
212
+ | 你写 | 相当于 |
213
+ |------|--------|
214
+ | `打印 内容` | `print(内容)` |
215
+ | `说 内容` | `print(内容)` |
216
+ | `输出 内容` | `print(内容)` |
217
+ | `吼 内容` | `print(内容)` |
218
+ | `输入()` | `input()` |
219
+ | `问()` | `input()` |
220
+
221
+ ### 布尔值和空值
222
+
223
+ | 你写 | 相当于 |
224
+ |------|--------|
225
+ | `真` | `True` |
226
+ | `对` | `True` |
227
+ | `没错` | `True` |
228
+ | `是的` | `True` |
229
+ | `假` | `False` |
230
+ | `错` | `False` |
231
+ | `不对` | `False` |
232
+ | `才怪` | `False` |
233
+ | `没有` | `None` |
234
+ | `空` | `None` |
235
+ | `无` | `None` |
236
+
237
+ ### 逻辑运算符
238
+
239
+ | 你写 | 相当于 |
240
+ |------|--------|
241
+ | `A 并且 B` | `A and B` |
242
+ | `A 跟 B` | `A and B` |
243
+ | `A 且 B` | `A and B` |
244
+ | `A 或者 B` | `A or B` |
245
+ | `A 或 B` | `A or B` |
246
+ | `不是 条件` | `not 条件` |
247
+ | `并非 条件` | `not 条件` |
248
+
249
+ ### 异常处理
250
+
251
+ | 你写 | 相当于 |
252
+ |------|--------|
253
+ | `尝试:` | `try:` |
254
+ | `试试:` | `try:` |
255
+ | `捕捉 异常:` | `except 异常:` |
256
+ | `抓到 异常:` | `except 异常:` |
257
+ | `管他呢:` | `finally:` |
258
+ | `最终:` | `finally:` |
259
+ | `抛 异常` | `raise 异常` |
260
+ | `扔 异常` | `raise 异常` |
261
+
262
+ ### 流程控制
263
+
264
+ | 你写 | 相当于 |
265
+ |------|--------|
266
+ | `继续` | `continue` |
267
+ | `下一个` | `continue` |
268
+ | `跳出` | `break` |
269
+ | `不玩了` | `break` |
270
+ | `懂的都懂` | `pass` |
271
+ | `就这样吧` | `pass` |
272
+
273
+ ### 模块
274
+
275
+ | 你写 | 相当于 |
276
+ |------|--------|
277
+ | `引入 模块` | `import 模块` |
278
+ | `导入 模块` | `import 模块` |
279
+ | `从 模块 引入 东西` | `from 模块 import 东西` |
280
+ | `东西 以 别名` | `东西 as 别名` |
281
+
282
+ ### 其他
283
+
284
+ | 你写 | 相当于 |
285
+ |------|--------|
286
+ | `自己` | `self` |
287
+ | `我` | `self` |
288
+ | `本尊` | `self` |
289
+ | `全局 变量` | `global 变量` |
290
+ | `全都要 变量` | `global 变量` |
291
+ | `生成 值` | `yield 值` |
292
+ | `断言 条件` | `assert 条件` |
293
+ | `我赌 条件` | `assert 条件` |
294
+ | `删除 变量` | `del 变量` |
295
+ | `丢掉 变量` | `del 变量` |
296
+ | `省略` | `...` |
297
+
298
+ ---
299
+
300
+ ## 操作符表
301
+
302
+ ### 赋值
303
+
304
+ | 你写 | 相当于 |
305
+ |------|--------|
306
+ | `x 👉 值` | `x = 值` |
307
+ | `x ← 值` | `x = 值` |
308
+ | `x ➡️ 值` | `x = 值` |
309
+ | `x 赋值加 1` | `x += 1` |
310
+ | `x 赋值减 1` | `x -= 1` |
311
+ | `x 赋值乘 2` | `x *= 2` |
312
+ | `x 赋值除 2` | `x /= 2` |
313
+
314
+ ### 比较
315
+
316
+ | 你写 | 相当于 |
317
+ |------|--------|
318
+ | `a 等于 b` | `a == b` |
319
+ | `a 不等于 b` | `a != b` |
320
+ | `a 大于 b` | `a > b` |
321
+ | `a 小于 b` | `a < b` |
322
+ | `a 大于等于 b` | `a >= b` |
323
+ | `a 小于等于 b` | `a <= b` |
324
+
325
+ ### 算术
326
+
327
+ | 你写 | 相当于 |
328
+ |------|--------|
329
+ | `a ➕ b` | `a + b` |
330
+ | `a ➖ b` | `a - b` |
331
+ | `a ✖️ b` | `a * b` |
332
+ | `a ➗ b` | `a / b` |
333
+ | `a 取整 b` | `a // b` |
334
+ | `a 取余 b` | `a % b` |
335
+ | `a 次方 b` | `a ** b` |
336
+ | `a 幂 b` | `a ** b` |
337
+
338
+ ### 中文单字操作符
339
+
340
+ 当两边有空格时,中文字也被识别为操作符:
341
+
342
+ | 你写 | 相当于 |
343
+ |------|--------|
344
+ | `a 加 b` | `a + b` |
345
+ | `a 减 b` | `a - b` |
346
+ | `a 乘 b` | `a * b` |
347
+ | `a 除 b` | `a / b` |
348
+
349
+ > 注意:单字操作符只在两边有空格时替换,这样不会把函数名中的字(如 `加法`)误替换。
350
+
351
+ ### 比较中文词
352
+
353
+ | 你写 | 相当于 |
354
+ |------|--------|
355
+ | `A 是 B` | `A is B` |
356
+ | `A 在 列表` | `A in 列表` |
357
+ | `A 不在 列表` | `A not in 列表` |
358
+
359
+ ---
360
+
361
+ ## 内置函数映射
362
+
363
+ | 你写 | 相当于 | 说明 |
364
+ |------|--------|------|
365
+ | `范围(n)` | `range(n)` | 生成范围 |
366
+ | `长度(x)` | `len(x)` | 取长度 |
367
+ | `类型(x)` | `type(x)` | 取类型 |
368
+ | `整数(x)` | `int(x)` | 转整数 |
369
+ | `浮点(x)` | `float(x)` | 转浮点 |
370
+ | `字符串(x)` | `str(x)` | 转字符串 |
371
+ | `列表(x)` | `list(x)` | 转列表 |
372
+ | `字典(x)` | `dict(x)` | 转字典 |
373
+ | `集合(x)` | `set(x)` | 转集合 |
374
+ | `绝对值(x)` | `abs(x)` | 绝对值 |
375
+ | `最大值(x, y)` | `max(x, y)` | 最大值 |
376
+ | `最小值(x, y)` | `min(x, y)` | 最小值 |
377
+ | `求和(列表)` | `sum(列表)` | 求和 |
378
+ | `排序(列表)` | `sorted(列表)` | 排序(返回新列表) |
379
+ | `所有(x)` | `all(x)` | 所有为真? |
380
+ | `任意(x)` | `any(x)` | 任意为真? |
381
+ | `过滤(函数, 列表)` | `filter(函数, 列表)` | 过滤 |
382
+ | `映射(函数, 列表)` | `map(函数, 列表)` | 映射 |
383
+ | `压缩(列表1, 列表2)` | `zip(列表1, 列表2)` | 拉链合并 |
384
+ | `枚举(列表)` | `enumerate(列表)` | 枚举 |
385
+
386
+ ### 方法映射
387
+
388
+ | 你写 | 相当于 |
389
+ |------|--------|
390
+ | `列表.追加(x)` | `list.append(x)` |
391
+ | `列表.添加(x)` | `list.append(x)` |
392
+ | `列表.弹出()` | `list.pop()` |
393
+ | `列表.取出(0)` | `list.pop(0)` |
394
+
395
+ ---
396
+
397
+ ## 语法特性
398
+
399
+ ### 列表推导式
400
+
401
+ ```python
402
+ # 中文关键字 + 列表推导式
403
+ 平方 👉 [x**2 对于 x 在 范围(10) 如果 x % 2 等于 0]
404
+ # → [0, 4, 16, 36, 64]
405
+ ```
406
+
407
+ ### 多变量赋值
408
+
409
+ ```python
410
+ a, b, c 👉 1, 2, 3
411
+ a, b 👉 b, a # 交换变量
412
+
413
+ # 配合中文名
414
+ 名字, 年龄 👉 "Ptyhno", 1
415
+ ```
416
+
417
+ ### 比较链
418
+
419
+ ```python
420
+ 如果 0 小于 x 并且 x 小于 10:
421
+ 打印 "x 在 0 和 10 之间"
422
+ ```
423
+
424
+ ### Lambda 表达式
425
+
426
+ ```python
427
+ 平方 👉 lambda x: x ** 2
428
+ 打印 平方(5) # → 25
429
+ ```
430
+
431
+ ### With 语句
432
+
433
+ (即将支持)
434
+
435
+ ### 装饰器
436
+
437
+ (即将支持)
438
+
439
+ ---
440
+
441
+ ## Import Hook
442
+
443
+ Ptyhno 的核心机制是 Python 的 **import hook**。当你 `import ptyhno` 时,它会把自己注册到 `sys.meta_path` 中。
444
+
445
+ 之后任何 `import 语句` 都会触发查找过程:
446
+
447
+ 1. Python 先在标准路径找 `.py` 文件
448
+ 2. 没找到 → PtyhnoFinder 开始工作
449
+ 3. 找 `.🦄` → `.pty` → `.ptyno` → `.疯` → `.pyt`
450
+ 4. 找到后 → PtyhnoLoader 读取文件 → 转译 → 编译 → 执行
451
+ 5. 返回一个正常的 Python 模块对象
452
+
453
+ 这意味着你可以:
454
+
455
+ ```python
456
+ # 在你的 Python 项目里混用两种语言
457
+ import ptyhno
458
+ import fib # fib.🦄 — 中文代码
459
+ import json # 标准库 — Python
460
+ from math import sqrt # 还是正常 Python
461
+
462
+ print(fib.费波那契(10)) # → 55
463
+ ```
464
+
465
+ ### 搜索优先级
466
+
467
+ 对于 `import foo`,按顺序找:
468
+ 1. `foo.py`(标准 Python)
469
+ 2. `foo.🦄`
470
+ 3. `foo.pty`
471
+ 4. `foo.ptyno`
472
+ 5. `foo.疯`
473
+ 6. `foo.pyt`
474
+
475
+ ---
476
+
477
+ ## 扩展名
478
+
479
+ | 扩展名 | 含义 | 推荐度 |
480
+ |--------|------|--------|
481
+ | `.🦄` | 独角兽! | ⭐⭐⭐⭐⭐ |
482
+ | `.pty` | Ptyhno 缩写 | ⭐⭐⭐⭐ |
483
+ | `.ptyno` | 全名 | ⭐⭐⭐ |
484
+ | `.疯` | 中文狂野 | ⭐⭐⭐ |
485
+ | `.pyt` | 兼容模式 | ⭐⭐ |
486
+
487
+ ---
488
+
489
+ ## 完整示例
490
+
491
+ ### 斐波那契数列
492
+
493
+ ```python
494
+ # fib.🦄
495
+ 定义 函数 费波那契(n):
496
+ 如果 n <= 1:
497
+ 返回 n
498
+ 不然:
499
+ 返回 费波那契(n - 1) + 费波那契(n - 2)
500
+
501
+ 循环 i 在 范围(10):
502
+ 打印 费波那契(i)
503
+ ```
504
+
505
+ ```python
506
+ >>> import ptyhno, fib
507
+ >>> fib.费波那契(10)
508
+ 55
509
+ ```
510
+
511
+ ### 排序算法
512
+
513
+ ```python
514
+ # sorting.🦄
515
+ 定义 函数 冒泡排序(arr):
516
+ n 👉 长度(arr)
517
+ 循环 i 在 范围(n):
518
+ 循环 j 在 范围(0, n - i - 1):
519
+ 如果 arr[j] > arr[j + 1]:
520
+ arr[j], arr[j + 1] 👉 arr[j + 1], arr[j]
521
+ 返回 arr
522
+
523
+ 定义 函数 快速排序(arr):
524
+ 如果 长度(arr) <= 1:
525
+ 返回 arr
526
+ 基准 👉 arr[0]
527
+ 左边 👉 [x 对于 x 在 arr[1:] 如果 x <= 基准]
528
+ 右边 👉 [x 对于 x 在 arr[1:] 如果 x > 基准]
529
+ 返回 快速排序(左边) + [基准] + 快速排序(右边)
530
+ ```
531
+
532
+ ### 数学工具
533
+
534
+ ```python
535
+ # math.🦄
536
+ 定义 函数 判断素数(n):
537
+ 如果 n < 2:
538
+ 返回 假
539
+ 循环 i 在 范围(2, int(n ** 0.5) + 1):
540
+ 如果 n % i 等于 0:
541
+ 返回 假
542
+ 返回 真
543
+
544
+ 定义 函数 最大公约数(a, b):
545
+ 当 b:
546
+ a, b 👉 b, a % b
547
+ 返回 a
548
+
549
+ 定义 函数 统计(数据):
550
+ 打印 "总数: " + 字符串(求和(数据))
551
+ 打印 "平均: " + 字符串(求和(数据) / 长度(数据))
552
+ 打印 "最大: " + 字符串(最大值(数据))
553
+ 打印 "最小: " + 字符串(最小值(数据))
554
+ ```
555
+
556
+ ### 猜数字游戏
557
+
558
+ ```python
559
+ # guess.🦄
560
+ 定义 函数 猜数字游戏():
561
+ 秘密 👉 42
562
+ 打印 "猜一个数字(1-100):"
563
+
564
+ 当 真:
565
+ 尝试:
566
+ 猜 👉 int(输入("> "))
567
+ 捕捉:
568
+ 打印 "输数字啊笨蛋!!"
569
+ 继续
570
+
571
+ 如果 猜 == 秘密:
572
+ 打印 "猜对了!🎉"
573
+ 跳出
574
+ 否则如果 猜 < 秘密:
575
+ 打印 "太小了"
576
+ 不然:
577
+ 打印 "太大了"
578
+ ```
579
+
580
+ ### 异常处理
581
+
582
+ ```python
583
+ 尝试:
584
+ 打印 1 / 0
585
+ 捕捉 ZeroDivisionError:
586
+ 打印 "不能除零啊兄弟" 哈哈哈
587
+ 管他呢:
588
+ 打印 "finally 必执行"
589
+ ```
590
+
591
+ ### 猜数字(完整网络用语版)
592
+
593
+ ```python
594
+ 定义 函数 猜数字():
595
+ 目标 👉 42
596
+
597
+ 打印 "来猜数字!" 冲冲冲!
598
+ 当 真:
599
+ 试一下:
600
+ 猜 👉 int(问("> "))
601
+ 抓到:
602
+ 打印 "输数字!" 真是的~
603
+ 继续 下一个!
604
+
605
+ 如果 猜 等于 目标:
606
+ 打印 "牛逼!猜对了🔥" 完美!
607
+ 不玩了 收工!
608
+ 否则如果 猜 小于 目标:
609
+ 打印 "小了" 再想想~
610
+ 不然:
611
+ 打印 "大了" 可惜可惜
612
+
613
+ 猜数字() 启动!
614
+ ```
615
+
616
+ ---
617
+
618
+ ## 工作原理
619
+
620
+ ### 转译流程
621
+
622
+ ```
623
+ Ptyhno 源码
624
+
625
+
626
+ Step 1: 提取字符串(保护字符串内容不被后续步骤影响)
627
+
628
+
629
+ Step 2: 统一引号(「」【】→ "")
630
+
631
+
632
+ Step 3: 去除注释(# // 注:)
633
+
634
+
635
+ Step 4: 标准化缩进(符号缩进 → 空格缩进)
636
+
637
+
638
+ Step 5: 替换操作符(👉 ➕ ➖ ✖️ ➗ → = + - * /)
639
+
640
+
641
+ Step 6: 去除行尾噪音(循环直到稳定)
642
+ │ ├── 匹配网络用语(SLANG_NOISE)
643
+ │ ├── 匹配重复双字词(REPEATED_BIGRAM)
644
+ │ ├── 匹配重复单字(REPEATED_NOISE)
645
+ │ └── 匹配字符噪音(TRAILING_NOISE)
646
+
647
+
648
+ Step 7: 替换关键字(中文 → Python)
649
+
650
+
651
+ Step 8: 恢复提取的字符串
652
+
653
+
654
+ Step 9: 后处理
655
+ │ ├── print 加括号
656
+ │ ├── 去重 break/continue
657
+ │ └── 压缩空行
658
+
659
+
660
+ 标准 Python 代码 → compile() → exec()
661
+ ```
662
+
663
+ ### 技术要点
664
+
665
+ - **Import Hook**: 通过 `sys.meta_path` 机制实现自定义导入器
666
+ - **关键字映射**: 正则 `\b...\b` 词边界匹配,避免中文词内误替
667
+ - **复合关键字**: `定义 函数` 优先于 `定义` + `函数` 分别替换
668
+ - **噪音循环**: 使用 while 循环反复净化直到行尾不再变化
669
+ - **内置函数**: `打印` `范围` `长度` 等在 KEYWORD_MAP 中映射为 Python 内置函数
670
+
671
+ ### 性能
672
+
673
+ Ptyhno 在转译后生成的是纯 Python 字节码,所以**运行时性能与原生 Python 完全相同**。转译本身的开销只在首次 import 时发生,之后模块被缓存。
674
+
675
+ ---
676
+
677
+ ## 项目结构
678
+
679
+ ```
680
+ ptyhno/
681
+ ├── ptyhno/
682
+ │ ├── __init__.py # 包入口
683
+ │ ├── transpiler.py # 转译引擎(Ptyhno → Python)
684
+ │ └── loader.py # Import Hook 实现
685
+ ├── examples/
686
+ │ ├── fib.🦄 # 斐波那契数列
687
+ │ ├── sorting.🦄 # 排序算法
688
+ │ ├── math.🦄 # 数学工具
689
+ │ └── guess.🦄 # 猜数字游戏
690
+ ├── README.md # 本文件
691
+ ├── CHEATSHEET.md # 快速参考小抄
692
+ ├── setup.py # 安装脚本
693
+ ├── pyproject.toml # 项目配置
694
+ ├── test.py # 测试套件(10项测试)
695
+ └── final_test.py # 最终验收测试
696
+ ```
697
+
698
+ ---
699
+
700
+ ## 许可
701
+
702
+ WTFPL — Do What The Fuck You Want To Public License
703
+
704
+ ## 贡献
705
+
706
+ 这是我们的语言,想加什么关键字就加什么关键字!
707
+ PR 永远欢迎,issue 永远开放,创意永远不嫌多 🦄