如何让Python将hehe/haha/hihi识别为内置关键字if/elif/else?
用自定义词汇替代Python的if/elif/else关键字实现趣味语法
需求说明
想把Python内置的if、elif、else关键字替换成hehe、haha、hihi来写代码,不用编写完整编译器,仅做趣味用途(让代码更难读),已有映射思路但不知道具体实现。
原标准Python代码:
if x == 7 or x == 2: print(":)") elif x == 3: print(":(") else: print(":|")
期望的自定义语法代码:
hehe x == 7 or x == 2: print(":)") haha x == 3: print(":(") hihi: print(":|")
实现思路
Python的关键字无法直接重定义,所以采用文本预处理+执行的方案:先把写好的自定义语法代码替换成标准Python关键字,再执行处理后的代码。
具体实现方案
方案1:直接处理字符串代码
把自定义语法的代码写在字符串里,替换后用exec执行:
# 定义自定义词到标准关键字的映射 keyword_map = { "hehe": "if", "haha": "elif", "hihi": "else" } # 用自定义语法编写的代码 funny_code = """ x = 7 hehe x == 7 or x == 2: print(":)") haha x == 3: print(":(") hihi: print(":|") """ # 替换自定义词为标准关键字(用正则匹配整词,避免误替换变量名) import re for funny_word, real_word in keyword_map.items(): funny_code = re.sub(rf"\b{funny_word}\b", real_word, funny_code) # 执行处理后的标准Python代码 exec(funny_code)
方案2:读取外部自定义语法文件
如果代码写在外部文件(比如funny_script.py),可以读取文件内容后替换再执行:
import re keyword_map = { "hehe": "if", "haha": "elif", "hihi": "else" } # 读取自定义语法文件内容 with open("funny_script.py", "r", encoding="utf-8") as f: code_content = f.read() # 替换关键字 for funny_word, real_word in keyword_map.items(): code_content = re.sub(rf"\b{funny_word}\b", real_word, code_content) # 直接执行代码 exec(code_content) # 可选:将处理后的代码保存为标准Python文件 with open("normal_script.py", "w", encoding="utf-8") as f: f.write(code_content)
注意事项
- 用正则
\b匹配整词是为了避免误替换,比如变量名hehe_x不会被改成if_x; exec会直接执行代码,不要用来处理未知来源的自定义代码,避免安全风险;- 这只是文本替换的预处理方案,并非真正修改Python语法,最终执行的还是标准Python代码。
内容的提问来源于stack exchange,提问作者Georxy
相关产品推荐
相关产品推荐

