Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit765ce6f

Browse files
committed
docs(library/pickle.po): editing, up to line 1600
1 parent0e20e41 commit765ce6f

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)

[8]ページ先頭

©2009-2025 Movatter.jp