8000 docs(library/pickle.po): editing, up to line 1600 · python/python-docs-zh-tw@765ce6f · GitHub
[go: up one dir, main page]

Skip to content

Commit 765ce6f

Browse files
committed
docs(library/pickle.po): editing, up to line 1600
1 parent 0e20e41 commit 765ce6f

File tree

1 file changed

+118
-6
lines changed

1 file changed

+118
-6
lines changed

library/pickle.po

Lines changed: 118 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1287,6 +1287,9 @@ msgstr ""
12871287
"果該物件沒有實作此方法,則本值必須是一個字典,且其將會被新增到物件的 :attr:"
12881288
"`~object.__dict__` 屬性中。"
12891289

1290+
# SkyLull: [T]
1291+
# signature: https://stackoverflow.com/questions/72788932/what-is-a-function-
1292+
# signature -> 輸入特徵
12901293
#: ../../library/pickle.rst:707
12911294
msgid ""
12921295
"Optionally, an iterator (and not a sequence) yielding successive items. "
@@ -1301,9 +1304,9 @@ msgstr ""
13011304
"可選項。一個用來提供連續項目的疊代器(而非序列)。這些項目將個別透過 ``obj."
13021305
"append(item)`` 方法或成批次地透過 ``obj.extend(list_of_items)`` 方法被附加到"
13031306
"物件中。主要用於串列(list)子類別,但只要其他類別具有相應的 :ref:`append 和 "
1304-
"extend 方法 <typesseq-common>`就也可以使用。 (如何選擇使用 :meth:`!append` "
1305-
"或 :meth:`!extend` 方法將取決於所選用的 pickle 協定版本以及要附加的項目數量,"
1306-
"因此必須同時支援這兩種方法。)"
1307+
"extend 方法 <typesseq-common>`和相同的輸入特徵(signature)就也可以使用。 "
1308+
"(如何選擇使用 :meth:`!append` 或 :meth:`!extend` 方法將取決於所選用的 "
1309+
"pickle 協定版本以及要附加的項目數量,因此必須同時支援這兩種方法。)"
13071310

13081311
#: ../../library/pickle.rst:717
13091312
msgid ""
@@ -1324,10 +1327,14 @@ msgid ""
13241327
"method. If not ``None``, this callable will have priority over ``obj``'s :"
13251328
"meth:`__setstate__`."
13261329
msgstr ""
1330+
"可選項。一個具有 ``(obj, state)`` 輸入特徵(signature)的可呼叫物件。該物件允"
1331+
"許使用者以可編寫的邏輯,而不是物件 ``obj`` 預設的 :meth:`__setstate__` 靜態方"
1332+
"法去控制特定物件的狀態更新方式。如果這個物件不是 ``None``,這個物件的呼叫優先"
1333+
"權將優於物件 ``obj`` 的 :meth:`__setstate__`。"
13271334

13281335
#: ../../library/pickle.rst:728
13291336
msgid "The optional sixth tuple item, ``(obj, state)``, was added."
1330-
msgstr ""
1337+
msgstr "加入第六個可選項(一個 ``(obj, state)`` 元組)。"
13311338

13321339
#: ../../library/pickle.rst:734
13331340
msgid ""
@@ -1338,10 +1345,14 @@ msgid ""
13381345
"a synonym for the extended version. The main use for this method is to "
13391346
"provide backwards-compatible reduce values for older Python releases."
13401347
msgstr ""
1348+
"另外,你也可以定義一個 :meth:`__reduce_ex__` 方法。唯一的不同的地方是此方法只"
1349+
"接受協定版本(整數)作為參數。當有定義本方法時,pickle 會優先調用它而不是 :"
1350+
"meth:`__reduce__` 。此外,呼叫 :meth:`__reduce__` 時也會自動變成呼叫這個變體"
1351+
"版本。此方法主要是為了向後相容的舊的 Python 版本而存在。"
13411352

13421353
#: ../../library/pickle.rst:746
13431354
msgid "Persistence of External Objects"
1344-
msgstr ""
1355+
msgstr "外部物件持久化"
13451356

13461357
#: ../../library/pickle.rst:752
13471358
msgid ""
@@ -1351,6 +1362,10 @@ msgid ""
13511362
"of alphanumeric characters (for protocol 0) [#]_ or just an arbitrary object "
13521363
"(for any newer protocol)."
13531364
msgstr ""
1365+
"為了方便物件持久化,:mod:`pickle` 模組支援對被封裝資料串流以外的物件參照。被"
1366+
"參照的物件是透過一個持久化 ID 來參照的,這個 ID 應該要是字母數字字元"
1367+
"(alphanumeric)組成的字串(協定 0) [#]_ 或者是任意的物件(任何較新的協"
1368+
"定)。"
13541369

13551370
#: ../../library/pickle.rst:758
13561371
msgid ""
@@ -1359,6 +1374,9 @@ msgid ""
13591374
"pickler and unpickler, :meth:`~Pickler.persistent_id` and :meth:`~Unpickler."
13601375
"persistent_load` respectively."
13611376
msgstr ""
1377+
":mod:`pickle` 沒有定義要如何解決或分派這個持久化 ID 的問題;故其處理方式有賴"
1378+
"使用者自行定義在封裝器(pickler)以及拆封器(unpickler)中。方法的名稱各自"
1379+
"為 :meth:`~Pickler.persistent_id` 和 :meth:`~Unpickler.persistent_load`。"
13621380

13631381
#: ../../library/pickle.rst:763
13641382
msgid ""
@@ -1370,19 +1388,27 @@ msgid ""
13701388
"object, along with a marker so that the unpickler will recognize it as a "
13711389
"persistent ID."
13721390
msgstr ""
1391+
"要封裝具有外部持久化 ID 的物件,封裝器(pickler)必須擁有一個自訂的方法 :"
1392+
"meth:`~Pickler.persistent_id`,這個方法將接收一個物件作為參數,並回傳 `None` "
1393+
"或該物件的持久化 ID。當回傳 `None` 時,封裝器會正常地封裝該物件。當回傳一個持"
1394+
"久化 ID 字串時,封裝器會封裝該物件並加上一個標記,讓拆封器(unpikler)能識別"
1395+
"它是一個持久化 ID。"
13731396

13741397
#: ../../library/pickle.rst:770
13751398
msgid ""
13761399
"To unpickle external objects, the unpickler must have a custom :meth:"
13771400
"`~Unpickler.persistent_load` method that takes a persistent ID object and "
13781401
"returns the referenced object."
13791402
msgstr ""
1403+
"要拆封外部物件,拆封器(unpickler)必須有一個自訂的 :meth:`~Unpickler."
1404+
"persistent_load` 方法,該方法應接受一個持久化 ID 物件,並回傳相對應的物件。"
13801405

13811406
#: ../../library/pickle.rst:774
13821407
msgid ""
13831408
"Here is a comprehensive example presenting how persistent ID can be used to "
13841409
"pickle external objects by reference."
13851410
msgstr ""
1411+
"以下是一個完整的範例,用以說明如何使用持久化 ID 來封裝具外部參照的物件。"
13861412

13871413
#: ../../library/pickle.rst:777
13881414
msgid ""
@@ -1481,10 +1507,96 @@ msgid ""
14811507
"if __name__ == '__main__':\n"
14821508
" main()\n"
14831509
msgstr ""
1510+
"# 展示如何使用持久化 ID 來封裝外部物件的簡單範例\n"
1511+
"\n"
1512+
"import pickle\n"
1513+
"import sqlite3\n"
1514+
"from collections import namedtuple\n"
1515+
"\n"
1516+
"# 代表資料庫中紀錄的一個簡易類別\n"
1517+
"MemoRecord = namedtuple(\"MemoRecord\", \"key, task\")\n"
1518+
"\n"
1519+
"class DBPickler(pickle.Pickler):\n"
1520+
"\n"
1521+
" def persistent_id(self, obj):\n"
1522+
" # 我們派發出一個持久 ID,而不是像一般類別實例那樣封裝 MemoRecord。\n"
1523+
" if isinstance(obj, MemoRecord):\n"
1524+
" # 我們的持久 ID 就是一個元組,裡面包含一個標籤和一個鍵,指向資料"
1525+
"庫中的特定紀錄。\n"
1526+
" return (\"MemoRecord\", obj.key)\n"
1527+
" else:\n"
1528+
" # 如果 obj 沒有持久 ID,則返回 None。這表示 obj 像平常那樣封裝即"
1529+
"可。\n"
1530+
" return None\n"
1531+
"\n"
1532+
"\n"
1533+
"class DBUnpickler(pickle.Unpickler):\n"
1534+
"\n"
1535+
" def __init__(self, file, connection):\n"
1536+
" super().__init__(file)\n"
1537+
" self.connection = connection\n"
1538+
"\n"
1539+
" def persistent_load(self, pid):\n"
1540+
" # 每當遇到持久 ID 時,此方法都會被呼叫。\n"
1541+
" # pid 是 DBPickler 所回傳的元組。\n"
1542+
" cursor = self.connection.cursor()\n"
1543+
" type_tag, key_id = pid\n"
1544+
" if type_tag == \"MemoRecord\":\n"
1545+
" # 從資料庫中抓取所引用的紀錄並返回。\n"
1546+
" cursor.execute(\"SELECT * FROM memos WHERE key=?\", "
1547+
"(str(key_id),))\n"
1548+
" key, task = cursor.fetchone()\n"
1549+
" return MemoRecord(key, task)\n"
1550+
" else:\n"
1551+
" # 如果無法返回正確的物件,則必須拋出錯誤。\n"
1552+
" # 否則 unpickler 會誤認為 None 是持久 ID 所引用的物件。\n"
1553+
" raise pickle.UnpicklingError(\"unsupported persistent object\")\n"
1554+
"\n"
1555+
"\n"
1556+
"def main():\n"
1557+
" import io\n"
1558+
" import pprint\n"
1559+
"\n"
1560+
" # 初始化資料庫。\n"
1561+
" conn = sqlite3.connect(\":memory:\")\n"
1562+
" cursor = conn.cursor()\n"
1563+
" cursor.execute(\"CREATE TABLE memos(key INTEGER PRIMARY KEY, task "
1564+
"TEXT)\")\n"
1565+
" tasks = (\n"
1566+
" 'give food to fish',\n"
1567+
" 'prepare group meeting',\n"
1568+
" 'fight with a zebra',\n"
1569+
" )\n"
1570+
" for task in tasks:\n"
1571+
" cursor.execute(\"INSERT INTO memos VALUES(NULL, ?)\", (task,))\n"
1572+
"\n"
1573+
" # 抓取要封裝的紀錄。\n"
1574+
" cursor.execute(\"SELECT * FROM memos\")\n"
1575+
" memos = [MemoRecord(key, task) for key, task in cursor]\n"
1576+
" # 使用我們自訂的 DBPickler 來保存紀錄。\n"
1577+
" file = io.BytesIO()\n"
1578+
" DBPickler(file).dump(memos)\n"
1579+
"\n"
1580+
" print(\"被封裝的紀錄:\")\n"
1581+
" pprint.pprint(memos)\n"
1582+
"\n"
1583+
" # 更新一筆紀錄(測試用)。\n"
1584+
" cursor.execute(\"UPDATE memos SET task='learn italian' WHERE key=1\")\n"
1585+
"\n"
1586+
" # 從 pickle 資料流中載入紀錄。\n"
1587+
" file.seek(0)\n"
1588+
" memos = DBUnpickler(file, conn).load()\n"
1589+
"\n"
1590+
" print(\"已拆封的紀錄:\")\n"
1591+
" pprint.pprint(memos)\n"
1592+
"\n"
1593+
"\n"
1594+
"if __name__ == '__main__':\n"
1595+
" main()\n"
14841596

14851597
#: ../../library/pickle.rst:782
14861598
msgid "Dispatch Tables"
1487-
msgstr ""
1599+
msgstr "分派表"
14881600

14891601
#: ../../library/pickle.rst:784
14901602
msgid ""

0 commit comments

Comments
 (0)
0