除“庄周梦蝶”外,庄子另外还讲过哪些梦呢?你可知道?
一、梦神木
《人世间》庄子述说了一个故事:
有个木匠,来到齐国曲辕,看到神庙里有一颗巨大的树。这棵树太大了,有一百围那么粗,好几丈高,来神庙参拜的人很多。
木匠来了后头也不看,只管走路,弟子就好奇地问,木匠解释说:
这大树是“散木”。做船会沉,做棺材会腐朽,做家具会坏,做门窗会潮,做柱子会虫蛀。百无一用,才能长这么大!
弟子们听后恍然大悟。
木匠回去后,做了一个梦。梦到大树对他说:
你把我比做那种所谓的无用木头,可是那些所谓的有用的树,果实成熟就被摘掉了,长高一点被剪掉。树木寿命原本很长,可是没过几年却枯死了,你希望我沦落到这样的下场吗?
大树意味深长地说:天下的事情,都是同理。我追求无用很久了,几经波折,差点被砍掉,如今终于修成如今的样子,如果我一开始就很有用,还能活到今天吗?
无用,才是大用啊!
大树最后又补充一句,说:你说我是散木,你又何不是散人呢?
这又是庄子假托木匠说的一个梦。
二、梦髑髅
《至乐》篇中,庄子梦见自己在去楚国的路上见到一具骷髅架。
庄子心血来潮,用马鞭敲了敲骷髅道:“先生,你是做了伤天害理的事吗?还是因为国破家亡被砍杀而死的呢?还是做了见不得人的事而羞愧自杀的呢?还是冻死饿死的啊?抑或是自然老死的呢?”
说完后,庄子便拿起骷髅头,枕着它睡觉了。
半夜,庄子梦见骷髅活了,说:“你说的,都是活人的情况,人死了就没有这些烦恼了”
庄子:“死了有什么呢?”
骷髅说:“死人,上无君王,下无大臣,无四季冷热、劳作,只有从从容容,和天地共长久,快乐无边!”
庄子不信,说:“我如果能恢复你的生命,你愿意吗?”
骷髅听后皱着眉说:“我怎么舍得抛弃快乐,回到人间受苦啊?”
庄子有所思地走了,后来又见到一个骷髅。
庄子指着骷髅说:“你知我知,你不曾死,也不曾活。你有何忧?我又有何乐?”
既然万物齐物平等,那么生前死后,也就不必再纠葛了。
三、梦白龟
《外物》篇中,庄子又用宋元君的名义,又说了一梦。
有一天,宋元君梦见有人披散着头发在侧门偷看,并且对自己说:“我来自深渊,我出使河伯的居所时,渔夫余且捕捉了我。”
宋元君醒来,派人占卜出这是一只神龟,周长五尺。宋元君叫了余且来朝献龟。
白龟送到,宋元君想杀龟又想养龟,正犹豫。
卜者说:“杀掉白龟,用来占卜,一定大吉。”
于是把白龟剖开,用龟板占卜数十次,没有一点失误。
孔子知道后说:“神龟能显梦给宋元君,却不能避开鱼网;能用来占卜没有一点失误,却不能逃脱剖腹。如此说来,神灵也有考虑不到的地方。
如果是一只普通的龟,也许会被放生。其圆五尺的白龟,世所罕见,如供奉在庙堂里,那是神圣荣耀、世俗权力的象征。于是,它就逃不了被杀的下场。
庄子,就是自由自在无拘无束的龟,但他不希望成为那只被供奉起来的龟。对于庄子来说,不自由,莫如死!
四、梦墨
这个梦,记载于《列御寇》:
郑缓学了三年儒家,终成大儒,在家乡办学,又让其弟郑翟学墨家。
弟弟学成后,也回到了家乡教学墨家,一时儒墨相辩,而他们的父亲只帮助弟弟助郑翟。十年而,郑缓爱不了压力自杀。
死后,郑缓托梦给父亲说:“我培养了你的儿子成为了墨家大家。你们却不来看看我的墓冢,现在树都长出来了”
庄子的底层意思呢,你们两家,别为谁是源头、谁是真理而争来争去,这又有什么意义呢?
庄子前面的几个梦,说的都是人生的意义,最后一个梦,说的却是不同学术的观点。当是时也,儒墨争论很大,道家位列一旁,世人多有以为坐山观虎斗之意,庄子于是写了这个梦,以梦说事,这是庄子的传统方法。
今天这几个《庄子》新故事是不是比“庄周梦蝶”更加离奇,更加光怪陆离?管它离不离奇,今天我想用新故事的“新”字来引出一个新版本,尽管有点生搬硬套——
它就是Python一周前(2021.10.04) 的新发版本3.10.0 :
Python3.10.0 是Python编程语言的最新稳定版本,它包含许多新特性和优化。
与3.9相比,3.10版本的主要新功能和变化包括:
PEP 623——弃用并准备移除PyUnicode对象中的wstr成员
PEP 604——允许将联合类型写入X | Y
PEP 612——参数规范变量
PEP 626——用于调试和其他工具的精确行号
PEP 618——将可选长度检查添加到zip
bpo-12782——现在正式允许使用括号中的上下文管理器
PEP 632——弃用distutils模块
PEP 613——显式类型别名
PEP 634——结构模式匹配:规范
PEP 635——结构模式匹配:动机和原理
PEP 636——结构模式匹配:教程
PEP 644——需要OpenSSL 1.1.1或更新版本
PEP 624——删除Py_UNICODE编码器API
PEP 597——添加可选编码警告
bpo-38605——from _uuFuture _uuImport annotations(PEP 563)在以前的预发行版中曾在此列表中,但由于一些兼容性问题,它已被推迟到Python 3.11。
注:以上内容为机器翻译,如有错误请谅解。
Python 3.10.0 官方下载地址
注:Python从3.9+开始已不支持 Windows7及更早版本。
Python 3.10.0 安装和运行
IDLE窗口的操作提示符移动编辑框外
与3.8.8版本相比,语句的缩进对齐一目了然
终于支持分支结构语句
不是switch-case, select-case等,而是 match-case
def fib(n): match n: case 1|2: return 1 case other: return fib(n-1)+fib(n-2) for i in range(1,11): print(fib(i)) 1 1 2 3 5 8 13 21 34 55
其中"case other:" 里的other并非关键字,但可能就是相当于其他编程语言中的 case else 或 otherwise 或 default 等等,它可以任意写但效果相同,如下:
def fib(n): match n: case 1|2: return 1 case anything: return fib(n-1)+fib(n-2) fib(5) 5 fib(10) 55
一个奇怪的小发现
怎么会有赋值功能?
i = 5 match i: case 1: print(1) case 2: print(2) case i: print(i**2) 25 match i: case 1: print(1) case 2: print(2) case n: print(i**2) 25 match i: case 1: print(1) case 2: print(2) case n: print(n**2) 25 match i: case 1: print(1) case 2: print(2) case i: print(n**2) 25 match i: case 1: print(1) case 2: print(2) case a: print(i**2) 25 match i: case 1: print(1) case 2: print(2) case i: print(a**2) 25 a 5 b Traceback (most recent call last): File "<pyshell#15>", line 1, in <module> b NameError: name 'b' is not defined match i: case 1: print(1) case 2: print(2) case b: print(i**2) 25 b 5
另一个小发现
这算不算bug,还是疏忽了没更新?新版本中关键字 match case 已加亮标注,黄色加亮已是关键字的待遇,但是内置库keyword中的kwlist列表还没有添加进去。
帮助文档也还没有match和case的内容
help('if') The "if" statement ****************** The "if" statement is used for conditional execution: if_stmt ::= "if" assignment_expression ":" suite ("elif" assignment_expression ":" suite)* ["else" ":" suite] It selects exactly one of the suites by evaluating the expressions one by one until one is found to be true (see section Boolean operations for the definition of true and false); then that suite is executed (and no other part of the "if" statement is executed or evaluated). If all expressions are false, the suite of the "else" clause, if present, is executed. Related help topics: TRUTHVALUE help('return') The "return" statement ********************** return_stmt ::= "return" [expression_list] "return" may only occur syntactically nested in a function definition, not within a nested class definition. If an expression list is present, it is evaluated, else "None" is substituted. "return" leaves the current function call with the expression list (or "None") as return value. When "return" passes control out of a "try" statement with a "finally" clause, that "finally" clause is executed before really leaving the function. In a generator function, the "return" statement indicates that the generator is done and will cause "StopIteration" to be raised. The returned value (if any) is used as an argument to construct "StopIteration" and becomes the "StopIteration.value" attribute. In an asynchronous generator function, an empty "return" statement indicates that the asynchronous generator is done and will cause "StopAsyncIteration" to be raised. A non-empty "return" statement is a syntax error in an asynchronous generator function. Related help topics: FUNCTIONS help('match') No Python documentation found for 'match'. Use help() to get the interactive help utility. Use help(str) for help on the str class. help('case') No Python documentation found for 'case'. Use help() to get the interactive help utility. Use help(str) for help on the str class.
Python 3.10.0 新增功能还有很多,有待以后进一步学习探索……