@@ -439,7 +439,6 @@ msgid "Reference Counts"
439
439
msgstr "參照計數"
440
440
441
441
#: ../../c-api/intro.rst:290
442
- #, fuzzy
443
442
msgid ""
444
443
"The reference count is important because today's computers have a finite "
445
444
"(and often severely limited) memory size; it counts how many different "
@@ -454,15 +453,15 @@ msgid ""
454
453
"that.\" )"
455
454
msgstr ""
456
455
"參照計數很重要,因為現今的電腦記憶體大小是有限的(而且通常是非常有限的);它"
457
- "計算有多少個不同的地方參照了一個物件。這樣的地方可以是另一個物件,或者全域"
458
- "(或靜態)C 變數,或者某個 C 函式中的本地變數。當一個物件的參照計數變為零時,"
459
- "該物件將被釋放 (deallocated)。如果它包含對其他物件的參照,則它們的參照計數會"
460
- "減少。如果這樣的減少使它們的參照計數變為零,則可以依次釋放那些其他物件,依此"
461
- "類推。 (此處相互參照物件的存在是個明顯的問題;目前,解決方案是「就不要那樣"
462
- "做」。)"
456
+ "計算有多少個不同的地方用有了一個物件的\\ :term:`強參照 <strong reference>`。"
457
+ "這樣的地方可以是另一個物件,或者全域(或靜態)C 變數,或者某個 C 函式中的本地"
458
+ "變數。當一個物件的最後一個\\ :term:`強參照 <strong reference>`\\ 被釋放時(即"
459
+ "其的參照計數變為零),該物件將被解除配置 (deallocated)。如果它包含對其他物件"
460
+ "的參照,則它們的參照會被釋放。如果這樣的釋放使得再也沒有任何對於它們的參照,"
461
+ "則可以依次為那些其他物件解除配置,依此類推。 (此處相互參照物件的存在是個明顯"
462
+ "的問題;目前,解決方案是「就不要那樣做」。)"
463
463
464
464
#: ../../c-api/intro.rst:307
465
- #, fuzzy
466
465
msgid ""
467
466
"Reference counts are always manipulated explicitly. The normal way is to "
468
467
"use the macro :c:func:`Py_INCREF` to take a new reference to an object (i.e. "
@@ -480,17 +479,17 @@ msgid ""
480
479
"``sizeof(Py_ssize_t) >= sizeof(void*)``). Thus, the reference count "
481
480
"increment is a simple operation."
482
481
msgstr ""
483
- "參照計數總是被明確地操作。正常的方法是使用巨集 :c:func:`Py_INCREF` 將物件的參"
484
- "照計數加一,並使用巨集 :c:func:`Py_DECREF` 來將其減一。:c:func:`Py_DECREF` 巨"
485
- "集比 incref 巨集複雜得多,因為它必須檢查參照計數是否變為零,然後呼叫物件的釋"
486
- "放器 (deallocator)。釋放器是包含在物件型別結構中的函式指標。特定型別的釋放"
487
- "器,在如果是一個複合物件型別(例如 list)時負責減少物件中包含的其他物件的參照"
488
- "計數,並執行任何需要的額外完結步驟。參照計數不可能溢出;至少與虛擬記憶體中用"
489
- "來保存參照計數的不同記憶體位置數量一樣多的位元會被使用(假設 "
490
- "``sizeof(Py_ssize_t) >= sizeof(void*)``)。因此參照計數增加是一個簡單的操作。"
482
+ "參照計數總是被明確地操作。正常的方法是使用巨集 :c:func:`Py_INCREF` 來取得對於"
483
+ "物件的參照(即參照計數加一),並使用巨集 :c:func:`Py_DECREF` 來釋放參照(即將"
484
+ "參照計數減一)。:c:func:`Py_DECREF` 巨集比 incref 巨集複雜得多,因為它必須檢"
485
+ "查參照計數是否變為零,然後呼叫物件的釋放器 (deallocator)。釋放器是包含在物件"
486
+ "型別結構中的函式指標。特定型別的釋放器,在如果是一個複合物件型別(例如 list)"
487
+ "時負責釋放物件中包含的其他物件的參照,並執行任何需要的額外完結步驟。參照計數"
488
+ "不可能溢出;至少與虛擬記憶體中用來保存參照計數的不同記憶體位置數量一樣多的位"
489
+ "元會被使用(假設 ``sizeof(Py_ssize_t) >= sizeof(void*)``)。因此參照計數增加"
490
+ "是一個簡單的操作。"
491
491
492
492
#: ../../c-api/intro.rst:323
493
- #, fuzzy
494
493
msgid ""
495
494
"It is not necessary to hold a :term:`strong reference` (i.e. increment the "
496
495
"reference count) for every local variable that contains a pointer to an "
@@ -507,16 +506,16 @@ msgid ""
507
506
"that are called from Python; the call mechanism guarantees to hold a "
508
507
"reference to every argument for the duration of the call."
509
508
msgstr ""
510
- "沒有必要為每個包含物件指標的本地變數增加物件的參照計數。理論上,當變數指向它"
511
- "時,物件的參照計數會增加 1,而當變數離開作用域時就會減少 1。然而這兩者會相互"
512
- "抵消,所以最後參照計數沒有改變。使用參照計數的唯一真正原因是防止物件還有變數"
513
- "指向它時被釋放。如果我們知道至少有一個物件的其他參照生存了至少與我們的變數一"
514
- "樣久,就不需要臨時增加參照計數。出現這種情況的一個重要情況是在從 Python 呼叫"
515
- "的擴充模組中作為引數傳遞給 C 函式的物件;呼叫機制保證在呼叫期間保持對每個參數"
516
- "的參照。"
509
+ "沒有必要為每個包含物件指標的本地變數物件都持有一個\\ :term:`強參照 <strong "
510
+ "reference>`\\ (即增加參照計數)。理論上,當變數指向它時,物件的參照計數會增"
511
+ "加 1,而當變數離開作用域時就會減少 1。然而這兩者會相互抵消,所以最後參照計數"
512
+ "沒有改變。使用參照計數的唯一真正原因是防止物件還有變數指向它時被解除配置。如"
513
+ "果我們知道至少有一個物件的其他參照生存了至少與我們的變數一樣久,就不需要臨時"
514
+ "增加建立新的\\ :term:`強參照 <strong reference>`\\ (即增加參照計數)。出現這"
515
+ "種情況的一個重要情況是在從 Python 呼叫的擴充模組中作為引數傳遞給 C 函式的物"
516
+ "件;呼叫機制保證在呼叫期間保持對每個參數的參照。"
517
517
518
518
#: ../../c-api/intro.rst:339
519
- #, fuzzy
520
519
msgid ""
521
520
"However, a common pitfall is to extract an object from a list and hold on to "
522
521
"it for a while without taking a new reference. Some other operation might "
@@ -526,14 +525,13 @@ msgid ""
526
525
"code path which allows control to flow back to the user from a :c:func:"
527
526
"`Py_DECREF`, so almost any operation is potentially dangerous."
528
527
msgstr ""
529
- "然而,一個常見的陷阱是從一個 list 中提取一個物件並保留它一段時間而不增加其參 "
530
- "照計數 。某些其他操作可能會從列表中刪除該物件,減少其參照計數並可能取消分配 "
531
- "它。真正的危險是看似無害的操作可能會呼叫可以執行此操作的任意 Python 程式碼;"
532
- "有一個程式碼路徑允許控制權從 :c:func:`Py_DECREF` 回歸使用者,因此幾乎任何操作 "
533
- "都有潛在危險 。"
528
+ "然而,一個常見的陷阱是從一個 list 中提取一個物件並保留它一段時間而不取得其參 "
529
+ "照 。某些其他操作可能會從列表中刪除該物件,減少其參照計數並可能取消分配它。真 "
530
+ "正的危險是看似無害的操作可能會呼叫可以執行此操作的任意 Python 程式碼;有一個 "
531
+ "程式碼路徑允許控制權從 :c:func:`Py_DECREF` 回歸使用者,因此幾乎任何操作都有潛 "
532
+ "在危險 。"
534
533
535
534
#: ../../c-api/intro.rst:347
536
- #, fuzzy
537
535
msgid ""
538
536
"A safe approach is to always use the generic operations (functions whose "
539
537
"name begins with ``PyObject_``, ``PyNumber_``, ``PySequence_`` or "
@@ -543,16 +541,16 @@ msgid ""
543
541
"when they are done with the result; this soon becomes second nature."
544
542
msgstr ""
545
543
"一種安全的方法是都使用通用 (generics) 操作(名稱以 ``PyObject_``、"
546
- "``PyNumber_``、``PySequence_`` 或 ``PyMapping_`` 開頭的函式)。這些操作總是增"
547
- "加它們回傳的物件的參照計數。這讓呼叫者有責任在處理完結果後呼叫 :c:func:"
548
- "`Py_DECREF`;這就成為第二本質。"
544
+ "``PyNumber_``、``PySequence_`` 或 ``PyMapping_`` 開頭的函式)。這些操作總是建"
545
+ "立新的對於它們回傳物件的\\ :term:`強參照 <strong reference>`\\ (即增加其參照"
546
+ "計數)。這讓呼叫者有責任在處理完結果後呼叫 :c:func:`Py_DECREF`;這就成為第二"
547
+ "本質。"
549
548
550
549
#: ../../c-api/intro.rst:358
551
550
msgid "Reference Count Details"
552
551
msgstr "參照計數詳細資訊"
553
552
554
553
#: ../../c-api/intro.rst:360
555
- #, fuzzy
556
554
msgid ""
557
555
"The reference count behavior of functions in the Python/C API is best "
558
556
"explained in terms of *ownership of references*. Ownership pertains to "
@@ -572,7 +570,7 @@ msgstr ""
572
570
"於參照而非物件(物件並非被擁有,它們總是共享的)。「擁有參照」意味著當不再需"
573
571
"要該參照時,負責在其上呼叫 Py_DECREF。所有權也可以轉移,這意味著接收參照所有"
574
572
"權的程式碼最終會負責在不需要參照時透過呼叫 :c:func:`Py_DECREF` 或 :c:func:"
575
- "`Py_XDECREF` 減少參照 --- 或者將這個責任再傳遞出去(通常是給它的呼叫者)。當"
573
+ "`Py_XDECREF` 釋放參照 --- 或者將這個責任再傳遞出去(通常是給它的呼叫者)。當"
576
574
"一個函式將參照的所有權傳遞給它的呼叫者時,呼叫者被稱為接收到一個\\ *新*\\ 參"
577
575
"照。當沒有所有權轉移時,呼叫者被稱為\\ *借用*\\ 參照。如果是\\ :term:`借用參"
578
576
"照 <borrowed reference>`\\ 就不需要做任何事情。"
@@ -653,7 +651,6 @@ msgstr ""
653
651
"::"
654
652
655
653
#: ../../c-api/intro.rst:422
656
- #, fuzzy
657
654
msgid ""
658
655
"It is much more common to use :c:func:`PyObject_SetItem` and friends with "
659
656
"items whose references you are only borrowing, like arguments that were "
@@ -664,9 +661,9 @@ msgid ""
664
661
"sequence) to a given item::"
665
662
msgstr ""
666
663
"更常見的是以那些借用參照的項目來使用 :c:func:`PyObject_SetItem` 及其系列函"
667
- "式,比如傳遞給你正在編寫的函式的引數。在那種情況下,他們關於參照計數的行為會 "
668
- "比較穩健,因為你不必增加參照計數就可以放棄參照 (「讓它被竊取」)。例如,此函 "
669
- "式將 list(實際上是任何可變序列)的所有項目設定於給定項目:"
664
+ "式,比如傳遞給你正在編寫的函式的引數。在那種情況下,他們關於參照的行為會比較 "
665
+ "穩健,因為你不取得新的一個參照就可以放棄參照 (「讓它被竊取」)。例如,此函式 "
666
+ "將 list(實際上是任何可變序列)的所有項目設定於給定項目:"
670
667
671
668
#: ../../c-api/intro.rst:452
672
669
msgid ""
0 commit comments