python文件中文 python官方出中文文件了

2021-10-11 22:03:18 字數 3956 閱讀 2490

該樓層疑似違規已被系統摺疊 隱藏此樓檢視此樓

算了,遲早要科普,之前被銻度吃了的憑印象再複述一遍吧。

我為什麼要特別集火「堆疊」作為例子?因為不管是這種詞語的創造者,連同沒有意識到問題的讀者在內,都是典型的沒文化的體現,某種意義上堪稱反智代表——而且特別諷刺的是,其中很大部分是牽涉到母語的理解問題上。

作為理論電腦科學和資訊科技類的 stack 的翻譯,「堆疊」這個詞在信達雅上都是不合格的。

首先,正常一點的翻譯是,stack 是「棧」,而「堆」是 heap ;這是和「堆疊」同時期就有的譯法。——注意,如果目的是為了清晰表意,「堆」「棧」就該是兩個而不是乙個概念;分不清楚的,屬實應該溫習一下怎麼數數了。

由於到這兩個概念本來在相關領域已經有關聯性,卻又都是截然不同的(且每個概念在原文中即有還有不同含義但又有歷史關聯的單獨義項的)專業術語,直接簡單粗暴的放置很容易導致誤會和不懂裝懂一錯再錯以訛傳訛。

由於誤導的基數龐大,「堆疊」不管是讀還是寫都不便就詞語上看出原本概念的清晰面目。

讓清楚的讀者搞不清原意,讓渾渾噩噩的使用者繼續稀里糊塗,此所謂不信。

第二,有點母語基礎的使用者應該能理解到這種翻譯的構詞方法上的**——偏義複詞,即使用冗餘的詞素來構詞。

這在古漢語中是比較常見的短語構造方法。但是用在現代漢語中構造單一翻譯,極為不妥——尤其是用於專業術語,每個詞素都是有明確單獨概念,容易造成初次接觸者誤會的情形。

就古漢語的特點來講,偏義複詞中表達實際含義和冗餘的詞素位置是不確定的,具有臨時性,需要按具體例項分析。而按現代漢語的習慣,有生命力的傳承習用詞語,要麼是強調相對性(「得失」「利害」「成敗」之類,和本例無關),否則基本都定型為是首個詞素表達詞義,如「窗戶」「國家」「妻子」「人物」「忘記」「質量」,概莫如是。

然而「堆疊」偏偏反其道而行之,表達實義的「棧」是第二個詞素,「堆」卻是冗餘的。這是有何居心?

有不止乙個通順的選擇卻偏偏選擇最能添亂的,此所謂不達。

第三,就構詞方法的選擇來看,目的性也非常模糊。

從事實上憑空製造麻煩的構詞和詞素本身的選擇的遣詞問題來看,譯者的語文素養著實不行,不知是為了顯擺什麼。

古人使用偏義複詞,大體原因無外乎湊足字句協調音韻緩衝語氣之類的修辭目的。但是專業術語用得著這些?造區區乙個「堆疊」,還打算來寫韻文駢文、湊前股后股不成?

不顧目的和場合,不合時宜地賣弄莫須有的風雅,此所謂**。

附帶對比,全國科學技術名詞審定委員會給出的相關領域的翻譯[termonline] 中「棧」和「堆疊」都有,但「棧」明確對應 stack 而「堆疊」沒有單獨的術語,且合成術語中「棧」佔絕對多數。

數學中還有把 stack algorithm 翻譯成「堆疊儲存演算法」的,和對岸總是「堆疊」倒是相映成趣。不過好像腦補了些東西……

題外話,把 push 翻譯成進棧是有問題的,因為原文的同源詞也可以是表示 enqueue 或者 push to dequeue ,和 stack 不一定有直接關係了。

別的嘛……「堆疊式貨運索道」——disposal material ropeway;「貨垛」——stack of freight 之類顯然不是一回事的就算了吧。

拿 stack 來說事的另一方面倒是和翻譯沒直接關係,而是這詞原文的使用者本身也有「沒文化」的歷史遺留問題。順便也可以帶上 heap 。

首先,stack 和 heap 最常用的義項是兩種不同的抽象資料結構。稍微具體一點,前者是帶 lifo(last-in-first-out) 約束的線性表,後者是和有序(近似)完全二叉搜尋樹同構的資料結構。

其次,stack 和 heap 還有不同義項的「過載」。這樣的不同義項造成了嚴重的誤導和混亂並且始終無法徹底解決。

歷史上,stack 具有的 lifo 特性被普遍帶有使用環境(environment) 來儲存狀態而實現可呼叫抽象的替換(substitution) 語義的語言實現機制。

實際上直接實現的這種替換(「呼叫」)過程的資料結構,是複數的活動記錄(activation records) 。使用 stack 是一種經濟的實現手段,但不表示不能用其它方式如 hash table 實現。

使用 stack 流行開來的,主要源自 algol60 。這在具體語言裡本身不是問題(特別是 algol60 還是 design by commitee 的),問題是之後很多缺乏對活動記錄這個基本概念理解的作者,以訛傳訛就把這玩意兒叫 (the) stack 了。

對活動記錄的理解和想象力匱乏很大程度上直接影響了控制結構的選擇。像 coroutine 之類在 1960 年代就該搞清楚的東西,在半個世紀之後仍然有作者把它當作 distinguishing new feature ,實在好笑。

而更嚴重的是 algol60 的硬體實現的有效性進一步限制了之後硬體設計者對指令集架構(isa, instruction set architecture) 選擇的偏好——總是提供區域性效能看起來更好,卻在實現高階控制結構時實在無能的 native stack 。於是要實現有能的語言,就算要用 lifo 的 stack 也不得不另外單獨維護而並沒有享受這裡的「好處」,甚至有呼叫約定(calling convention) 上的添亂(如 powerpc 上的 sml/nj 實現)。

這個問題嚴重性之一體現在,到現在所謂主流的 native 語言在這裡實質上是無法保證可移植的,例如因為照顧到允許利用 native stack ,iso c 和 iso c++ 都不對巢狀函式呼叫的區域性物件儲存多大***,資源不夠用總是未定義行為。如 posix 等進一步的規範也並不對這裡的檢測有提供多少積極的方案,於是應用開發者基本上都假裝這個問題不存在。而今天終端使用者能「享受」到的 stack overflow 之所以是安全漏洞,很大程度始作俑者也就是這裡。

像 misra c 之類的「禁用遞迴」(呼叫)的鴕鳥政策也不能確保解決這裡的安全問題(不遞迴呼叫照樣能 stack overflow ),反倒是教壞了不少小朋友,加深對遞迴呼叫的誤解,或者甚至都教育得連一般意義上的遞迴(如演算法的遞迴描述)和具體語言實現中的遞迴呼叫的區別都分不清楚。這種程度的問題教育上都沒法扯清,理論界大體裝作不知道,如何指望工業界還能在依賴這方面的問題上實際生產出多靠譜的玩意兒?

類似地,heap 本來也是指實現,一般的概念是自由儲存(free store) 。據信 1960 年代的 lisp 實現使用 heap 作為自由儲存的實現。這個實現被訛傳到主流的作業系統的 free store 的分配機制中,逐漸取代了自由儲存的存在感。

這個問題雖然看來沒有 stack 那麼嚴重,但是其實錯位得更厲害。考慮到 stack 源頭算是 lifo 的資料結構,禁用高階控制結構(如 first-class continuation )的設計中,所謂的 the stack 還真能算是 stack 資料結構的特例。

然而現在的所謂 heap 的自由儲存基本上和作為資料結構 heap 無關。特別地,要教會一般小朋友從自由儲存上分配 stack 是一般王道做法,就更無厘頭了。

看,從下到上都甩不掉「沒文化」的鍋。

再次,guido van rossum 在程式語言理論上也挺沒文化的,比如搞不清 proper tail recursion 的作用,也對應該怎麼設計活動記錄兼顧不同需求一頭霧水(關於 ptr 的本質問題,參見 [clinger98];關於 tco 不影響 stack inspection 的討論,參見 [clements, felleisen 03] )。上梁尚且如此,python 背景下的文化自然更對付不了這類沒文化後遺症的問題了。

當然,倒不是針對具體的誰,這類例子業內多了去了……還有搞 lisp 的還有分不清 tco 和 ptr 被 w.d. clinger 嘲諷過的……[comp.lang.lisp]

references (不放完整 url 免得被吃):

菜鳥學python文件 菜鳥學習python筆記

1.模組 三種呼叫方法 1.在vim寫的乙個python的檔案 運用import 匯入,就可以在互動模式的直接進行呼叫 2.呼叫模組裡面的某個函式 from 模組名字 in 函式名字 3.將模組名字變短進行呼叫 import 模組原名 as 新名字 2.基於python開發的東西存放目錄 usr l...

python中文件和幫助

1 python中文件資源 注釋 dir 物件 物件的可用屬性列表 文件字串 doc 附加在物件上的檔案中的文件 pydoc help函式 物件的互動幫助 pydoc html報表 瀏覽器中模組文件 標準手冊 正式的語言和庫的說明 出版書籍 商業參考書籍 2 用於python 注釋 3 dir函式 ...

python中文件IO的讀寫

首先明確一點,現代計算機的作業系統都不允許程式直接操作磁碟的,所以讀取檔案和寫入檔案都是有作業系統提供的提供的介面完成的,每一種程式語言都會把作業系統提供的低階c介面封裝起來方便使用,python也不例外。python是怎麼樣讀取檔案的。檔案開啟 f open c users administrat...